]> git.donarmstrong.com Git - lilypond.git/blob - lily/stream-event.cc
* lily/*-performer.cc: Converted try_music to listen_*
[lilypond.git] / lily / stream-event.cc
1 /*
2   stream-event.cc -- implement Stream_event
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 2005-2006 Erik Sandberg  <mandolaerik@gmail.com>
7 */
8
9 #include "stream-event.hh"
10
11 #include "ly-smobs.icc"
12 #include "context.hh"
13 #include "input.hh"
14 #include "input-smob.hh"
15
16 /* TODO: Rename Stream_event -> Event */
17
18 Stream_event::Stream_event ()
19   : Prob (ly_symbol2scm ("Stream_event"), SCM_EOL)
20 {
21 }
22
23 Stream_event::Stream_event (SCM event_class, SCM mutable_props)
24   : Prob (ly_symbol2scm ("Stream_event"),
25           scm_list_1 (scm_cons (ly_symbol2scm ("class"), event_class)))
26 {
27   mutable_property_alist_ = mutable_props;
28 }
29
30 Stream_event::Stream_event (SCM property_alist)
31   : Prob (ly_symbol2scm ("Stream_event"), SCM_EOL)
32 {
33   mutable_property_alist_ = property_alist;
34 }
35
36 Stream_event::Stream_event (SCM class_name, Input *origin)
37   : Prob (ly_symbol2scm ("Stream_event"),
38           scm_list_1 (scm_cons (ly_symbol2scm ("class"), class_name)))
39 {
40   if (origin)
41     set_spot (origin);
42 }
43
44 Stream_event::Stream_event (Stream_event *ev)
45   : Prob (ly_symbol2scm ("Stream_event"), SCM_EOL)
46 {
47   mutable_property_alist_ = scm_copy_tree (ev->mutable_property_alist_);
48   immutable_property_alist_ = ev->immutable_property_alist_;
49 }
50
51 Input *
52 Stream_event::origin () const
53 {
54   Input *i = unsmob_input (get_property ("origin"));
55   return i ? i : &dummy_input_global;
56 }
57
58 void
59 Stream_event::set_spot (Input *i)
60 {
61   set_property ("origin", make_input (*i));
62 }
63
64 bool
65 Stream_event::internal_in_event_class (SCM class_name)
66 {
67   SCM cl = get_property ("class");
68   cl = scm_call_1 (ly_lily_module_constant ("ly:make-event-class"), cl);
69   return scm_c_memq (class_name, cl) != SCM_BOOL_F;
70 }
71
72 IMPLEMENT_TYPE_P (Stream_event, "ly:stream-event?");
73
74 MAKE_SCHEME_CALLBACK (Stream_event, undump, 1);
75 MAKE_SCHEME_CALLBACK (Stream_event, dump, 1);
76
77 SCM
78 Stream_event::dump (SCM self)
79 {
80   Stream_event *ev = unsmob_stream_event (self);
81   // Reversed alists look prettier.
82   return scm_cons (scm_reverse (ev->immutable_property_alist_),
83                    scm_reverse (ev->mutable_property_alist_));
84 }
85
86 SCM
87 Stream_event::undump (SCM data)
88 {
89   Stream_event *obj = new Stream_event ();
90   obj->immutable_property_alist_ = scm_reverse (scm_car (data));
91   obj->mutable_property_alist_ = scm_reverse (scm_cdr (data));
92   return obj->unprotect ();
93 }
94
95 Stream_event *
96 unsmob_stream_event (SCM m)
97 {
98   return dynamic_cast<Stream_event*> (unsmob_prob (m));
99 }