2 This file is part of LilyPond, the GNU music typesetter.
4 Copyright (C) 2005--2010 Erik Sandberg <mandolaerik@gmail.com>
6 LilyPond is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
11 LilyPond is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
20 #include "stream-event.hh"
22 #include "ly-smobs.icc"
27 /* TODO: Rename Stream_event -> Event */
29 Stream_event::Stream_event ()
30 : Prob (ly_symbol2scm ("Stream_event"), SCM_EOL
)
34 Stream_event::Stream_event (SCM event_class
, SCM mutable_props
)
35 : Prob (ly_symbol2scm ("Stream_event"),
36 scm_list_1 (scm_cons (ly_symbol2scm ("class"), event_class
)))
38 mutable_property_alist_
= mutable_props
;
41 Stream_event::Stream_event (SCM class_name
, Input
*origin
)
42 : Prob (ly_symbol2scm ("Stream_event"),
43 scm_list_1 (scm_cons (ly_symbol2scm ("class"), class_name
)))
50 Stream_event::copy_mutable_properties () const
52 return ly_event_deep_copy (mutable_property_alist_
);
56 Stream_event::origin () const
58 Input
*i
= unsmob_input (get_property ("origin"));
59 return i
? i
: &dummy_input_global
;
63 Stream_event::set_spot (Input
*i
)
65 set_property ("origin", make_input (*i
));
69 Stream_event::internal_in_event_class (SCM class_name
)
71 SCM cl
= get_property ("class");
72 cl
= scm_call_1 (ly_lily_module_constant ("ly:make-event-class"), cl
);
73 return scm_c_memq (class_name
, cl
) != SCM_BOOL_F
;
76 IMPLEMENT_TYPE_P (Stream_event
, "ly:stream-event?");
78 MAKE_SCHEME_CALLBACK (Stream_event
, undump
, 1);
79 MAKE_SCHEME_CALLBACK (Stream_event
, dump
, 1);
82 Stream_event::dump (SCM self
)
84 Stream_event
*ev
= unsmob_stream_event (self
);
85 // Reversed alists look prettier.
86 return scm_cons (scm_reverse (ev
->immutable_property_alist_
),
87 scm_reverse (ev
->mutable_property_alist_
));
91 Stream_event::undump (SCM data
)
93 Stream_event
*obj
= new Stream_event ();
94 obj
->immutable_property_alist_
= scm_reverse (scm_car (data
));
95 obj
->mutable_property_alist_
= scm_reverse (scm_cdr (data
));
96 return obj
->unprotect ();
100 unsmob_stream_event (SCM m
)
102 return dynamic_cast<Stream_event
*> (unsmob_prob (m
));