]> git.donarmstrong.com Git - lilypond.git/blob - lily/stream-event.cc
Update source file headers. Fixes using standard GNU package conventions.
[lilypond.git] / lily / stream-event.cc
1 /*
2   This file is part of LilyPond, the GNU music typesetter.
3
4   Copyright (C) 2005-2006 Erik Sandberg  <mandolaerik@gmail.com>
5
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.
10
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.
15
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/>.
18 */
19
20 #include "stream-event.hh"
21
22 #include "ly-smobs.icc"
23 #include "context.hh"
24 #include "input.hh"
25 #include "input.hh"
26
27 /* TODO: Rename Stream_event -> Event */
28
29 Stream_event::Stream_event ()
30   : Prob (ly_symbol2scm ("Stream_event"), SCM_EOL)
31 {
32 }
33
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)))
37 {
38   mutable_property_alist_ = mutable_props;
39 }
40
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)))
44 {
45   if (origin)
46     set_spot (origin);
47 }
48
49 SCM
50 Stream_event::copy_mutable_properties () const
51 {
52   return ly_event_deep_copy (mutable_property_alist_);
53 }
54
55 Input *
56 Stream_event::origin () const
57 {
58   Input *i = unsmob_input (get_property ("origin"));
59   return i ? i : &dummy_input_global;
60 }
61
62 void
63 Stream_event::set_spot (Input *i)
64 {
65   set_property ("origin", make_input (*i));
66 }
67
68 bool
69 Stream_event::internal_in_event_class (SCM class_name)
70 {
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;
74 }
75
76 IMPLEMENT_TYPE_P (Stream_event, "ly:stream-event?");
77
78 MAKE_SCHEME_CALLBACK (Stream_event, undump, 1);
79 MAKE_SCHEME_CALLBACK (Stream_event, dump, 1);
80
81 SCM
82 Stream_event::dump (SCM self)
83 {
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_));
88 }
89
90 SCM
91 Stream_event::undump (SCM data)
92 {
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 ();
97 }
98
99 Stream_event *
100 unsmob_stream_event (SCM m)
101 {
102   return dynamic_cast<Stream_event*> (unsmob_prob (m));
103 }