switch to using boost::signals2 instead of sigc++, at least for libardour. not finish...
[ardour.git] / libs / ardour / session_handle.cc
1 /*
2     Copyright (C) 2009 Paul Davis
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18 */
19
20 #include "pbd/error.h"
21
22 #include "ardour/session.h"
23 #include "ardour/session_handle.h"
24
25 #include "i18n.h"
26
27 using namespace std;
28 using namespace ARDOUR;
29 using namespace PBD;
30
31 SessionHandlePtr::SessionHandlePtr (Session* s)
32         : _session (s) 
33 {
34         if (_session) {
35                 _session_connections.add_connection (_session->GoingAway.connect (boost::bind (&SessionHandlePtr::session_going_away, this)));
36         }
37 }       
38
39 void
40 SessionHandlePtr::set_session (Session* s)
41 {
42         _session_connections.drop_connections ();
43
44         if (_session) {
45                 _session = 0;
46         }
47
48         if (s) {
49                 _session = s;
50                 _session_connections.add_connection (_session->GoingAway.connect (boost::bind (&SessionHandlePtr::session_going_away, this)));
51         }
52 }
53
54 void
55 SessionHandlePtr::session_going_away ()
56 {
57         set_session (0);
58 }
59
60 /*-------------------------*/
61
62
63 SessionHandleRef::SessionHandleRef (Session& s)
64         : _session (s) 
65 {
66         scoped_connect (_session.GoingAway, boost::bind (&SessionHandleRef::session_going_away, this));
67 }       
68
69 void
70 SessionHandleRef::session_going_away ()
71 {
72         error << string_compose (_("programming error: %1"), "SessionHandleRef exists across sesssion deletion!") << endmsg;
73 }