BEAST/BSE - Better Audio System and Sound Engine  0.9.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
bseitem.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_ITEM_H__
3 #define __BSE_ITEM_H__
4 
5 #include <bse/bseobject.hh>
6 
7 G_BEGIN_DECLS
8 
9 
10 /* --- object type macros --- */
11 #define BSE_TYPE_ITEM (BSE_TYPE_ID (BseItem))
12 #define BSE_ITEM(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), BSE_TYPE_ITEM, BseItem))
13 #define BSE_ITEM_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), BSE_TYPE_ITEM, BseItemClass))
14 #define BSE_IS_ITEM(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), BSE_TYPE_ITEM))
15 #define BSE_IS_ITEM_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), BSE_TYPE_ITEM))
16 #define BSE_ITEM_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), BSE_TYPE_ITEM, BseItemClass))
17 
18 
19 /* --- BseItem member macros --- */
20 #define BSE_ITEM_SINGLETON(object) ((BSE_OBJECT_FLAGS (object) & BSE_ITEM_FLAG_SINGLETON) != 0)
21 #define BSE_ITEM_INTERNAL(item) ((BSE_OBJECT_FLAGS (item) & BSE_ITEM_FLAG_INTERN_BRANCH) != 0)
22 
23 
24 /* --- bse item flags --- */
25 typedef enum /*< skip >*/
26 {
27  BSE_ITEM_FLAG_SINGLETON = 1 << (BSE_OBJECT_FLAGS_USHIFT + 0),
28  BSE_ITEM_FLAG_INTERN = 1 << (BSE_OBJECT_FLAGS_USHIFT + 1),
29  BSE_ITEM_FLAG_INTERN_BRANCH = 1 << (BSE_OBJECT_FLAGS_USHIFT + 2)
30 } BseItemFlags;
31 #define BSE_ITEM_FLAGS_USHIFT (BSE_OBJECT_FLAGS_USHIFT + 3)
32 
33 struct BseItem : BseObject {
34  guint use_count;
35  BseItem *parent;
36  BseParasite *parasite;
37 };
38 
40  void (*get_candidates) (BseItem *item,
41  guint param_id,
42  BsePropertyCandidates *pc,
43  GParamSpec *pspec);
44  void (*set_parent) (BseItem *item,
45  BseItem *parent);
46  gboolean (*needs_storage) (BseItem *item,
47  BseStorage *storage);
48  void (*compat_setup) (BseItem *item,
49  guint vmajor,
50  guint vminor,
51  guint vmicro);
52  guint (*get_seqid) (BseItem *item);
53  BseUndoStack* (*get_undo) (BseItem *item);
54 };
55 
56 typedef void (*BseItemUncross) (BseItem *owner,
57  BseItem *link);
58 typedef gboolean (*BseItemCheckContainer) (BseContainer *container,
59  BseItem *item,
60  gpointer data);
61 typedef gboolean (*BseItemCheckProxy) (BseItem *proxy,
62  BseItem *item,
63  gpointer data);
64 
65 
66 /* --- prototypes --- */
67 BseItemSeq* bse_item_gather_items (BseItem *item,
68  BseItemSeq *iseq,
69  GType base_type,
70  BseItemCheckContainer ccheck,
71  BseItemCheckProxy pcheck,
72  gpointer data);
73 BseItemSeq* bse_item_gather_items_typed (BseItem *item,
74  BseItemSeq *iseq,
75  GType proxy_type,
76  GType container_type,
77  gboolean allow_ancestor);
78 gboolean bse_item_get_candidates (BseItem *item,
79  const gchar *property,
80  BsePropertyCandidates *pc);
81 void bse_item_set_internal (gpointer item,
82  gboolean internal);
83 gboolean bse_item_needs_storage (BseItem *item,
84  BseStorage *storage);
85 void bse_item_compat_setup (BseItem *item,
86  guint vmajor,
87  guint vminor,
88  guint vmicro);
89 guint bse_item_get_seqid (BseItem *item);
90 void bse_item_queue_seqid_changed (BseItem *item);
91 BseSuper* bse_item_get_super (BseItem *item);
92 BseSNet* bse_item_get_snet (BseItem *item);
93 BseProject* bse_item_get_project (BseItem *item);
94 BseItem* bse_item_get_toplevel (BseItem *item);
95 gboolean bse_item_has_ancestor (BseItem *item,
96  BseItem *ancestor);
97 BseItem* bse_item_common_ancestor (BseItem *item1,
98  BseItem *item2);
99 void bse_item_cross_link (BseItem *owner,
100  BseItem *link,
101  BseItemUncross uncross_func);
102 void bse_item_cross_unlink (BseItem *owner,
103  BseItem *link,
104  BseItemUncross uncross_func);
105 void bse_item_uncross_links (BseItem *owner,
106  BseItem *link);
107 BseItem* bse_item_use (BseItem *item);
108 void bse_item_unuse (BseItem *item);
109 void bse_item_set_parent (BseItem *item,
110  BseItem *parent);
111 BseErrorType bse_item_exec (gpointer item,
112  const gchar *procedure,
113  ...);
114 BseErrorType bse_item_exec_void (gpointer item,
115  const gchar *procedure,
116  ...); /* ignore return values */
117 /* undo-aware functions */
118 void bse_item_set_valist_undoable (gpointer object,
119  const gchar *first_property_name,
120  va_list var_args);
121 void bse_item_set_undoable (gpointer object,
122  const gchar *first_property_name,
123  ...) G_GNUC_NULL_TERMINATED;
124 void bse_item_set_property_undoable (BseItem *self,
125  const gchar *name,
126  const GValue *value);
127 /* undo admin functions */
128 BseUndoStack* bse_item_undo_open_str (void *item, const std::string &string);
129 #define bse_item_undo_open(item,...) bse_item_undo_open_str (item, Rapicorn::string_format (__VA_ARGS__).c_str())
130 void bse_item_undo_close (BseUndoStack *ustack);
131 /* undo helper functions */
132 void bse_item_push_undo_proc (gpointer item,
133  const gchar *procedure,
134  ...);
135 void bse_item_push_redo_proc (gpointer item,
136  const gchar *procedure,
137  ...);
138 void bse_item_backup_to_undo (BseItem *self,
139  BseUndoStack *ustack);
140 void bse_item_push_undo_storage (BseItem *self,
141  BseUndoStack *ustack,
142  BseStorage *storage);
143 /* convenience */
144 #define bse_item_set bse_item_set_undoable
145 #define bse_item_get g_object_get
146 BseMusicalTuningType bse_item_current_musical_tuning (BseItem *self);
147 
148 G_END_DECLS
149 
150 #endif /* __BSE_ITEM_H__ */
void bse_item_cross_unlink(BseItem *owner, BseItem *link, BseItemUncross uncross_func)
Definition: bseitem.cc:595
Definition: bsecontainer.hh:26
Definition: bsesnet.hh:37
Definition: bsesuper.hh:25
Definition: bseobject.hh:39
void bse_item_uncross_links(BseItem *owner, BseItem *link)
Definition: bseitem.cc:623
BseItemSeq * bse_item_gather_items_typed(BseItem *item, BseItemSeq *iseq, GType proxy_type, GType container_type, gboolean allow_ancestor)
Definition: bseitem.cc:389
Definition: bseobject.hh:44
BseMusicalTuningType bse_item_current_musical_tuning(BseItem *self)
Definition: bseitem.cc:706
Definition: bseitem.hh:39
Definition: bsestorage.hh:49
void bse_item_cross_link(BseItem *owner, BseItem *link, BseItemUncross uncross_func)
Definition: bseitem.cc:566
Definition: bseproject.hh:26
Definition: bseitem.hh:33
link