summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-12-17 18:24:23 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-12-17 18:24:23 +0000
commitf6fdd8dcbf41f864e9f0cc32dabe81fe3533ddfe (patch)
tree5214c580b9e6c17a499fa587660dbf949e892bf2 /gtk2_ardour
parentda762129f19c28aff64f833b6ec09fba946faef6 (diff)
switch to using boost::signals2 instead of sigc++, at least for libardour. not finished yet, but compiles, loads sessions, records and can close a session without a crash
git-svn-id: svn://localhost/ardour2/branches/3.0@6372 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/add_route_dialog.cc15
-rw-r--r--gtk2_ardour/add_route_dialog.h3
-rw-r--r--gtk2_ardour/analysis_window.cc2
-rw-r--r--gtk2_ardour/analysis_window.h10
-rw-r--r--gtk2_ardour/ardour_dialog.cc1
-rw-r--r--gtk2_ardour/ardour_dialog.h21
-rw-r--r--gtk2_ardour/ardour_ui.cc323
-rw-r--r--gtk2_ardour/ardour_ui.h8
-rw-r--r--gtk2_ardour/ardour_ui2.cc46
-rw-r--r--gtk2_ardour/ardour_ui_dependents.cc4
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc99
-rw-r--r--gtk2_ardour/ardour_ui_options.cc66
-rw-r--r--gtk2_ardour/audio_clock.cc168
-rw-r--r--gtk2_ardour/audio_clock.h4
-rw-r--r--gtk2_ardour/audio_region_editor.cc50
-rw-r--r--gtk2_ardour/audio_region_editor.h2
-rw-r--r--gtk2_ardour/audio_region_view.cc25
-rw-r--r--gtk2_ardour/audio_streamview.cc51
-rw-r--r--gtk2_ardour/audio_time_axis.cc2
-rw-r--r--gtk2_ardour/audio_time_axis.h2
-rw-r--r--gtk2_ardour/automation_line.cc44
-rw-r--r--gtk2_ardour/automation_line.h2
-rw-r--r--gtk2_ardour/automation_region_view.cc6
-rw-r--r--gtk2_ardour/automation_selectable.h12
-rw-r--r--gtk2_ardour/automation_streamview.cc2
-rw-r--r--gtk2_ardour/automation_time_axis.cc30
-rw-r--r--gtk2_ardour/automation_time_axis.h4
-rw-r--r--gtk2_ardour/axis_view.cc4
-rw-r--r--gtk2_ardour/axis_view.h13
-rw-r--r--gtk2_ardour/bundle_manager.cc14
-rw-r--r--gtk2_ardour/bundle_manager.h1
-rw-r--r--gtk2_ardour/crossfade_edit.cc47
-rw-r--r--gtk2_ardour/crossfade_edit.h9
-rw-r--r--gtk2_ardour/crossfade_view.cc2
-rw-r--r--gtk2_ardour/crossfade_view.h4
-rw-r--r--gtk2_ardour/editor.cc348
-rw-r--r--gtk2_ardour/editor.h12
-rw-r--r--gtk2_ardour/editor_actions.cc8
-rw-r--r--gtk2_ardour/editor_audio_import.cc40
-rw-r--r--gtk2_ardour/editor_audiotrack.cc6
-rw-r--r--gtk2_ardour/editor_canvas.cc8
-rw-r--r--gtk2_ardour/editor_component.cc25
-rw-r--r--gtk2_ardour/editor_component.h17
-rw-r--r--gtk2_ardour/editor_drag.cc80
-rw-r--r--gtk2_ardour/editor_drag.h1
-rw-r--r--gtk2_ardour/editor_export_audio.cc20
-rw-r--r--gtk2_ardour/editor_imageframe.cc6
-rw-r--r--gtk2_ardour/editor_keyboard.cc4
-rw-r--r--gtk2_ardour/editor_keys.cc12
-rw-r--r--gtk2_ardour/editor_locations.cc4
-rw-r--r--gtk2_ardour/editor_locations.h2
-rw-r--r--gtk2_ardour/editor_markers.cc100
-rw-r--r--gtk2_ardour/editor_mixer.cc24
-rw-r--r--gtk2_ardour/editor_mouse.cc52
-rw-r--r--gtk2_ardour/editor_ops.cc576
-rw-r--r--gtk2_ardour/editor_regions.cc12
-rw-r--r--gtk2_ardour/editor_regions.h2
-rw-r--r--gtk2_ardour/editor_route_groups.cc14
-rw-r--r--gtk2_ardour/editor_route_groups.h2
-rw-r--r--gtk2_ardour/editor_routes.cc56
-rw-r--r--gtk2_ardour/editor_routes.h18
-rw-r--r--gtk2_ardour/editor_rulers.cc128
-rw-r--r--gtk2_ardour/editor_selection.cc20
-rw-r--r--gtk2_ardour/editor_snapshots.cc4
-rw-r--r--gtk2_ardour/editor_snapshots.h2
-rw-r--r--gtk2_ardour/editor_summary.cc13
-rw-r--r--gtk2_ardour/editor_summary.h2
-rw-r--r--gtk2_ardour/editor_tempodisplay.cc70
-rw-r--r--gtk2_ardour/editor_timefx.cc16
-rw-r--r--gtk2_ardour/export_channel_selector.cc14
-rw-r--r--gtk2_ardour/export_channel_selector.h7
-rw-r--r--gtk2_ardour/export_dialog.cc32
-rw-r--r--gtk2_ardour/export_file_notebook.cc4
-rw-r--r--gtk2_ardour/export_file_notebook.h9
-rw-r--r--gtk2_ardour/export_filename_selector.cc20
-rw-r--r--gtk2_ardour/export_filename_selector.h9
-rw-r--r--gtk2_ardour/export_format_dialog.cc26
-rw-r--r--gtk2_ardour/export_format_selector.cc5
-rw-r--r--gtk2_ardour/export_format_selector.h7
-rw-r--r--gtk2_ardour/export_timespan_selector.cc36
-rw-r--r--gtk2_ardour/export_timespan_selector.h6
-rw-r--r--gtk2_ardour/gain_meter.cc25
-rw-r--r--gtk2_ardour/gain_meter.h17
-rw-r--r--gtk2_ardour/ghostregion.cc2
-rw-r--r--gtk2_ardour/ghostregion.h8
-rw-r--r--gtk2_ardour/group_tabs.cc8
-rw-r--r--gtk2_ardour/group_tabs.h2
-rw-r--r--gtk2_ardour/imageframe_socket_handler.cc2
-rw-r--r--gtk2_ardour/imageframe_time_axis.cc6
-rw-r--r--gtk2_ardour/imageframe_time_axis.h2
-rw-r--r--gtk2_ardour/imageframe_time_axis_group.cc4
-rw-r--r--gtk2_ardour/imageframe_time_axis_view.cc4
-rw-r--r--gtk2_ardour/imageframe_view.cc2
-rw-r--r--gtk2_ardour/io_selector.h2
-rw-r--r--gtk2_ardour/level_meter.cc10
-rw-r--r--gtk2_ardour/level_meter.h8
-rw-r--r--gtk2_ardour/location_ui.cc141
-rw-r--r--gtk2_ardour/location_ui.h27
-rw-r--r--gtk2_ardour/marker_time_axis.cc4
-rw-r--r--gtk2_ardour/marker_time_axis.h2
-rw-r--r--gtk2_ardour/marker_time_axis_view.cc4
-rw-r--r--gtk2_ardour/midi_cut_buffer.cc6
-rw-r--r--gtk2_ardour/midi_cut_buffer.h2
-rw-r--r--gtk2_ardour/midi_list_editor.cc76
-rw-r--r--gtk2_ardour/midi_list_editor.h5
-rw-r--r--gtk2_ardour/midi_region_view.cc22
-rw-r--r--gtk2_ardour/midi_region_view.h5
-rw-r--r--gtk2_ardour/midi_streamview.cc33
-rw-r--r--gtk2_ardour/midi_time_axis.cc12
-rw-r--r--gtk2_ardour/midi_time_axis.h2
-rw-r--r--gtk2_ardour/mixer_strip.cc71
-rw-r--r--gtk2_ardour/mixer_strip.h12
-rw-r--r--gtk2_ardour/mixer_ui.cc71
-rw-r--r--gtk2_ardour/mixer_ui.h11
-rw-r--r--gtk2_ardour/panner_ui.cc37
-rw-r--r--gtk2_ardour/panner_ui.h9
-rw-r--r--gtk2_ardour/playlist_selector.cc18
-rw-r--r--gtk2_ardour/playlist_selector.h3
-rw-r--r--gtk2_ardour/plugin_selector.cc17
-rw-r--r--gtk2_ardour/plugin_selector.h3
-rw-r--r--gtk2_ardour/plugin_ui.cc5
-rw-r--r--gtk2_ardour/plugin_ui.h3
-rw-r--r--gtk2_ardour/point_selection.h1
-rw-r--r--gtk2_ardour/port_group.cc64
-rw-r--r--gtk2_ardour/port_group.h33
-rw-r--r--gtk2_ardour/port_matrix.cc56
-rw-r--r--gtk2_ardour/port_matrix.h8
-rw-r--r--gtk2_ardour/port_matrix_body.cc17
-rw-r--r--gtk2_ardour/port_matrix_body.h2
-rw-r--r--gtk2_ardour/port_matrix_column_labels.cc18
-rw-r--r--gtk2_ardour/port_matrix_component.cc12
-rw-r--r--gtk2_ardour/port_matrix_grid.cc20
-rw-r--r--gtk2_ardour/port_matrix_row_labels.cc14
-rw-r--r--gtk2_ardour/processor_box.cc57
-rw-r--r--gtk2_ardour/processor_box.h17
-rw-r--r--gtk2_ardour/public_editor.h6
-rw-r--r--gtk2_ardour/region_editor.h13
-rw-r--r--gtk2_ardour/region_gain_line.cc23
-rw-r--r--gtk2_ardour/region_gain_line.h4
-rw-r--r--gtk2_ardour/region_selection.cc5
-rw-r--r--gtk2_ardour/region_selection.h7
-rw-r--r--gtk2_ardour/region_view.cc2
-rw-r--r--gtk2_ardour/region_view.h4
-rw-r--r--gtk2_ardour/return_ui.cc19
-rw-r--r--gtk2_ardour/return_ui.h10
-rw-r--r--gtk2_ardour/rhythm_ferret.cc16
-rw-r--r--gtk2_ardour/route_group_menu.cc18
-rw-r--r--gtk2_ardour/route_group_menu.h16
-rw-r--r--gtk2_ardour/route_params_ui.cc130
-rw-r--r--gtk2_ardour/route_params_ui.h24
-rw-r--r--gtk2_ardour/route_processor_selection.cc19
-rw-r--r--gtk2_ardour/route_processor_selection.h8
-rw-r--r--gtk2_ardour/route_time_axis.cc28
-rw-r--r--gtk2_ardour/route_time_axis.h2
-rw-r--r--gtk2_ardour/route_ui.cc111
-rw-r--r--gtk2_ardour/route_ui.h13
-rw-r--r--gtk2_ardour/selection.cc8
-rw-r--r--gtk2_ardour/selection.h9
-rw-r--r--gtk2_ardour/send_ui.cc18
-rw-r--r--gtk2_ardour/send_ui.h8
-rw-r--r--gtk2_ardour/session_import_dialog.cc43
-rw-r--r--gtk2_ardour/session_import_dialog.h3
-rw-r--r--gtk2_ardour/session_metadata_dialog.cc27
-rw-r--r--gtk2_ardour/session_metadata_dialog.h5
-rw-r--r--gtk2_ardour/sfdb_ui.cc37
-rw-r--r--gtk2_ardour/sfdb_ui.h6
-rw-r--r--gtk2_ardour/streamview.cc41
-rw-r--r--gtk2_ardour/streamview.h12
-rw-r--r--gtk2_ardour/strip_silence_dialog.cc2
-rw-r--r--gtk2_ardour/strip_silence_dialog.h2
-rw-r--r--gtk2_ardour/time_axis_view.cc4
-rw-r--r--gtk2_ardour/time_axis_view.h3
-rw-r--r--gtk2_ardour/time_axis_view_item.h4
-rw-r--r--gtk2_ardour/visual_time_axis.cc2
-rw-r--r--gtk2_ardour/visual_time_axis.h2
175 files changed, 2322 insertions, 2389 deletions
diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc
index a828caeb92..a3d3deaea5 100644
--- a/gtk2_ardour/add_route_dialog.cc
+++ b/gtk2_ardour/add_route_dialog.cc
@@ -61,13 +61,14 @@ std::vector<std::string> AddRouteDialog::channel_combo_strings;
std::vector<std::string> AddRouteDialog::track_mode_strings;
std::vector<std::string> AddRouteDialog::bus_mode_strings;
-AddRouteDialog::AddRouteDialog (Session & s)
+AddRouteDialog::AddRouteDialog (Session* s)
: ArdourDialog (X_("add route dialog"))
- , _session (s)
, routes_adjustment (1, 1, 128, 1, 4)
, routes_spinner (routes_adjustment)
, mode_label (_("Track mode:"))
{
+ set_session (s);
+
if (track_mode_strings.empty()) {
track_mode_strings = I18N (track_mode_names);
@@ -391,7 +392,7 @@ AddRouteDialog::route_group ()
return 0;
}
- return _session.route_group_by_name (route_group_combo.get_active_text());
+ return _session->route_group_by_name (route_group_combo.get_active_text());
}
void
@@ -404,7 +405,7 @@ AddRouteDialog::refill_route_groups ()
route_group_combo.append_text (_("No group"));
- _session.foreach_route_group (sigc::mem_fun (*this, &AddRouteDialog::add_route_group));
+ _session->foreach_route_group (sigc::mem_fun (*this, &AddRouteDialog::add_route_group));
route_group_combo.set_active (2);
}
@@ -412,14 +413,14 @@ AddRouteDialog::refill_route_groups ()
void
AddRouteDialog::group_changed ()
{
- if (route_group_combo.get_active_text () == _("New group...")) {
- RouteGroup* g = new RouteGroup (_session, "", RouteGroup::Active);
+ if (_session && route_group_combo.get_active_text () == _("New group...")) {
+ RouteGroup* g = new RouteGroup (*_session, "", RouteGroup::Active);
RouteGroupDialog d (g, Gtk::Stock::NEW);
int const r = d.do_run ();
if (r == Gtk::RESPONSE_OK) {
- _session.add_route_group (g);
+ _session->add_route_group (g);
add_route_group (g);
route_group_combo.set_active (3);
} else {
diff --git a/gtk2_ardour/add_route_dialog.h b/gtk2_ardour/add_route_dialog.h
index 7af8b47d8d..1422270331 100644
--- a/gtk2_ardour/add_route_dialog.h
+++ b/gtk2_ardour/add_route_dialog.h
@@ -42,7 +42,7 @@ class Editor;
class AddRouteDialog : public ArdourDialog
{
public:
- AddRouteDialog (ARDOUR::Session &);
+ AddRouteDialog (ARDOUR::Session*);
~AddRouteDialog ();
bool track ();
@@ -58,7 +58,6 @@ class AddRouteDialog : public ArdourDialog
ARDOUR::RouteGroup* route_group ();
private:
- ARDOUR::Session& _session;
Gtk::Entry name_template_entry;
Gtk::ComboBoxText track_bus_combo;
Gtk::Adjustment routes_adjustment;
diff --git a/gtk2_ardour/analysis_window.cc b/gtk2_ardour/analysis_window.cc
index c916678646..6d858732ff 100644
--- a/gtk2_ardour/analysis_window.cc
+++ b/gtk2_ardour/analysis_window.cc
@@ -250,7 +250,7 @@ AnalysisWindow::analyze_data (Gtk::Button */*button*/)
Sample *mixbuf = (Sample *) malloc(sizeof(Sample) * fft_graph.windowSize());
float *gain = (float *) malloc(sizeof(float) * fft_graph.windowSize());
- Selection s = PublicEditor::instance().get_selection();
+ Selection& s (PublicEditor::instance().get_selection());
TimeSelection ts = s.time;
RegionSelection ars = s.regions;
diff --git a/gtk2_ardour/analysis_window.h b/gtk2_ardour/analysis_window.h
index 05b983fb20..19ef84069a 100644
--- a/gtk2_ardour/analysis_window.h
+++ b/gtk2_ardour/analysis_window.h
@@ -37,6 +37,8 @@
#include <glibmm/thread.h>
+#include "ardour/session_handle.h"
+
#include "fft_graph.h"
#include "fft_result.h"
@@ -44,7 +46,8 @@ namespace ARDOUR {
class Session;
}
-class AnalysisWindow : public Gtk::Window
+
+class AnalysisWindow : public Gtk::Window, public ARDOUR::SessionHandlePtr
{
public:
AnalysisWindow ();
@@ -57,12 +60,7 @@ public:
void analyze ();
- void set_session(ARDOUR::Session *session) { _session = session; };
-
private:
-
- ARDOUR::Session *_session;
-
void clear_tracklist();
void source_selection_changed (Gtk::RadioButton *);
diff --git a/gtk2_ardour/ardour_dialog.cc b/gtk2_ardour/ardour_dialog.cc
index cafb356d60..cd95666b16 100644
--- a/gtk2_ardour/ardour_dialog.cc
+++ b/gtk2_ardour/ardour_dialog.cc
@@ -90,7 +90,6 @@ ArdourDialog::on_show ()
void
ArdourDialog::init ()
{
- session = 0;
set_type_hint(Gdk::WINDOW_TYPE_HINT_DIALOG);
set_border_width (10);
CloseAllDialogs.connect (sigc::bind (sigc::mem_fun (*this, &ArdourDialog::response), RESPONSE_CANCEL));
diff --git a/gtk2_ardour/ardour_dialog.h b/gtk2_ardour/ardour_dialog.h
index cd0fce4162..bd74afc47d 100644
--- a/gtk2_ardour/ardour_dialog.h
+++ b/gtk2_ardour/ardour_dialog.h
@@ -20,20 +20,23 @@
#ifndef __ardour_dialog_h__
#define __ardour_dialog_h__
-#include "ardour/ardour.h"
#include <gtkmm/window.h>
#include <gtkmm/dialog.h>
+#include "ardour/ardour.h"
+#include "ardour/session_handle.h"
+
namespace ARDOUR {
class Session;
}
/*
* This virtual parent class is so that each dialog box uses the
- * same mechanism to declare its closing, and to have a common
- * method of connecting and disconnecting from a Session.
+ * same mechanism to declare its closing. It shares a common
+ * method of connecting and disconnecting from a Session with
+ * all other objects that have a handle on a Session.
*/
-class ArdourDialog : public Gtk::Dialog
+class ArdourDialog : public Gtk::Dialog, public ARDOUR::SessionHandlePtr
{
public:
ArdourDialog (std::string title, bool modal = false, bool use_separator = false);
@@ -48,16 +51,6 @@ class ArdourDialog : public Gtk::Dialog
void on_unmap ();
void on_show ();
- ARDOUR::Session *session;
-
- virtual void set_session (ARDOUR::Session* s) {
- session = s;
- }
-
- virtual void session_gone () {
- set_session (0);
- }
-
static void close_all_dialogs () { CloseAllDialogs(); }
private:
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 9086bde940..f97d892c4c 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -193,7 +193,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
editor = 0;
mixer = 0;
- session = 0;
editor = 0;
engine = 0;
_session_is_new = false;
@@ -415,11 +414,11 @@ ARDOUR_UI::post_engine ()
/* now start and maybe save state */
if (do_engine_start () == 0) {
- if (session && _session_is_new) {
+ if (_session && _session_is_new) {
/* we need to retain initial visual
settings for a new session
*/
- session->save_state ("");
+ _session->save_state ("");
}
}
}
@@ -556,9 +555,9 @@ ARDOUR_UI::save_ardour_state ()
XMLNode enode(static_cast<Stateful*>(editor)->get_state());
XMLNode mnode(mixer->get_state());
- if (session) {
- session->add_instant_xml (enode);
- session->add_instant_xml (mnode);
+ if (_session) {
+ _session->add_instant_xml (enode);
+ _session->add_instant_xml (mnode);
} else {
Config->add_instant_xml (enode);
Config->add_instant_xml (mnode);
@@ -582,8 +581,8 @@ ARDOUR_UI::autosave_session ()
return 1;
}
- if (session) {
- session->maybe_write_autosave();
+ if (_session) {
+ _session->maybe_write_autosave();
}
return 1;
@@ -594,7 +593,7 @@ ARDOUR_UI::update_autosave ()
{
ENSURE_GUI_THREAD (*this, &ARDOUR_UI::update_autosave)
- if (session && session->dirty()) {
+ if (_session && _session->dirty()) {
if (_autosave_connection.connected()) {
_autosave_connection.disconnect();
}
@@ -753,14 +752,14 @@ ARDOUR_UI::check_memory_locking ()
void
ARDOUR_UI::finish()
{
- if (session) {
+ if (_session) {
- if (session->transport_rolling()) {
- session->request_stop ();
+ if (_session->transport_rolling()) {
+ _session->request_stop ();
usleep (250000);
}
- if (session->dirty()) {
+ if (_session->dirty()) {
switch (ask_about_saving_session(_("quit"))) {
case -1:
return;
@@ -789,10 +788,10 @@ If you still wish to quit, please use the\n\n\
point_oh_five_second_connection.disconnect ();
point_zero_one_second_connection.disconnect();
- // session->set_deletion_in_progress ();
- session->remove_pending_capture_state ();
- delete session;
- session = 0;
+ // _session->set_deletion_in_progress ();
+ _session->remove_pending_capture_state ();
+ delete _session;
+ _session = 0;
}
ArdourDialog::close_all_dialogs ();
@@ -826,13 +825,13 @@ ARDOUR_UI::ask_about_saving_session (const string & what)
string prompt;
string type;
- if (session->snap_name() == session->name()) {
+ if (_session->snap_name() == _session->name()) {
type = _("session");
} else {
type = _("snapshot");
}
prompt = string_compose(_("The %1 \"%2\"\nhas not been saved.\n\nAny changes made this time\nwill be lost unless you save it.\n\nWhat do you want to do?"),
- type, session->snap_name());
+ type, _session->snap_name());
prompt_label.set_text (prompt);
prompt_label.set_name (X_("PrompterLabel"));
@@ -941,14 +940,14 @@ ARDOUR_UI::update_buffer_load ()
char buf[64];
uint32_t c, p;
- if (session) {
- c = session->capture_load ();
- p = session->playback_load ();
+ if (_session) {
+ c = _session->capture_load ();
+ p = _session->playback_load ();
push_buffer_stats (c, p);
snprintf (buf, sizeof (buf), _("Buffers p:%" PRIu32 "%% c:%" PRIu32 "%%"),
- session->playback_load(), session->capture_load());
+ _session->playback_load(), _session->capture_load());
buffer_load_label.set_text (buf);
} else {
buffer_load_label.set_text ("");
@@ -967,19 +966,19 @@ ARDOUR_UI::count_recenabled_streams (Route& route)
void
ARDOUR_UI::update_disk_space()
{
- if (session == 0) {
+ if (_session == 0) {
return;
}
- nframes_t frames = session->available_capture_duration();
+ nframes_t frames = _session->available_capture_duration();
char buf[64];
- nframes_t fr = session->frame_rate();
+ nframes_t fr = _session->frame_rate();
if (frames == max_frames) {
strcpy (buf, _("Disk: 24hrs+"));
} else {
rec_enabled_streams = 0;
- session->foreach_route (this, &ARDOUR_UI::count_recenabled_streams);
+ _session->foreach_route (this, &ARDOUR_UI::count_recenabled_streams);
if (rec_enabled_streams) {
frames /= rec_enabled_streams;
@@ -1154,7 +1153,7 @@ ARDOUR_UI::recent_session_row_activated (const TreePath& /*path*/, TreeViewColum
void
ARDOUR_UI::open_recent_session ()
{
- bool can_return = (session != 0);
+ bool can_return = (_session != 0);
if (session_selector_window == 0) {
build_session_selector ();
@@ -1278,7 +1277,7 @@ ARDOUR_UI::session_add_midi_route (bool disk, RouteGroup* route_group, uint32_t
{
list<boost::shared_ptr<MidiTrack> > tracks;
- if (session == 0) {
+ if (_session == 0) {
warning << _("You cannot add a track without a session already loaded.") << endmsg;
return;
}
@@ -1286,7 +1285,7 @@ ARDOUR_UI::session_add_midi_route (bool disk, RouteGroup* route_group, uint32_t
try {
if (disk) {
- tracks = session->new_midi_track (ARDOUR::Normal, route_group, how_many);
+ tracks = _session->new_midi_track (ARDOUR::Normal, route_group, how_many);
if (tracks.size() != how_many) {
if (how_many == 1) {
@@ -1296,7 +1295,7 @@ ARDOUR_UI::session_add_midi_route (bool disk, RouteGroup* route_group, uint32_t
}
}
} /*else {
- if ((route = session->new_midi_route ()) == 0) {
+ if ((route = _session->new_midi_route ()) == 0) {
error << _("could not create new midi bus") << endmsg;
}
}*/
@@ -1319,14 +1318,14 @@ ARDOUR_UI::session_add_audio_route (bool track, bool aux, int32_t input_channels
list<boost::shared_ptr<AudioTrack> > tracks;
RouteList routes;
- if (session == 0) {
+ if (_session == 0) {
warning << _("You cannot add a track or bus without a session already loaded.") << endmsg;
return;
}
try {
if (track) {
- tracks = session->new_audio_track (input_channels, output_channels, mode, route_group, how_many);
+ tracks = _session->new_audio_track (input_channels, output_channels, mode, route_group, how_many);
if (tracks.size() != how_many) {
if (how_many == 1) {
@@ -1339,7 +1338,7 @@ ARDOUR_UI::session_add_audio_route (bool track, bool aux, int32_t input_channels
} else {
- routes = session->new_audio_route (aux, input_channels, output_channels, route_group, how_many);
+ routes = _session->new_audio_route (aux, input_channels, output_channels, route_group, how_many);
if (routes.size() != how_many) {
if (how_many == 1) {
@@ -1379,9 +1378,9 @@ ARDOUR_UI::do_transport_locate (nframes_t new_position)
{
nframes_t _preroll = 0;
- if (session) {
+ if (_session) {
// XXX CONFIG_CHANGE FIX - requires AnyTime handling
- // _preroll = session->convert_to_frames_at (new_position, Config->get_preroll());
+ // _preroll = _session->convert_to_frames_at (new_position, Config->get_preroll());
if (new_position > _preroll) {
new_position -= _preroll;
@@ -1389,22 +1388,22 @@ ARDOUR_UI::do_transport_locate (nframes_t new_position)
new_position = 0;
}
- session->request_locate (new_position);
+ _session->request_locate (new_position);
}
}
void
ARDOUR_UI::transport_goto_start ()
{
- if (session) {
- session->goto_start();
+ if (_session) {
+ _session->goto_start();
/* force displayed area in editor to start no matter
what "follow playhead" setting is.
*/
if (editor) {
- editor->center_screen (session->current_start_frame ());
+ editor->center_screen (_session->current_start_frame ());
}
}
}
@@ -1412,8 +1411,8 @@ ARDOUR_UI::transport_goto_start ()
void
ARDOUR_UI::transport_goto_zero ()
{
- if (session) {
- session->request_locate (0);
+ if (_session) {
+ _session->request_locate (0);
/* force displayed area in editor to start no matter
@@ -1429,7 +1428,7 @@ ARDOUR_UI::transport_goto_zero ()
void
ARDOUR_UI::transport_goto_wallclock ()
{
- if (session && editor) {
+ if (_session && editor) {
time_t now;
struct tm tmnow;
@@ -1438,11 +1437,11 @@ ARDOUR_UI::transport_goto_wallclock ()
time (&now);
localtime_r (&now, &tmnow);
- frames = tmnow.tm_hour * (60 * 60 * session->frame_rate());
- frames += tmnow.tm_min * (60 * session->frame_rate());
- frames += tmnow.tm_sec * session->frame_rate();
+ frames = tmnow.tm_hour * (60 * 60 * _session->frame_rate());
+ frames += tmnow.tm_min * (60 * _session->frame_rate());
+ frames += tmnow.tm_sec * _session->frame_rate();
- session->request_locate (frames);
+ _session->request_locate (frames);
/* force displayed area in editor to start no matter
what "follow playhead" setting is.
@@ -1457,9 +1456,9 @@ ARDOUR_UI::transport_goto_wallclock ()
void
ARDOUR_UI::transport_goto_end ()
{
- if (session) {
- nframes_t const frame = session->current_end_frame();
- session->request_locate (frame);
+ if (_session) {
+ nframes_t const frame = _session->current_end_frame();
+ _session->request_locate (frame);
/* force displayed area in editor to start no matter
what "follow playhead" setting is.
@@ -1474,23 +1473,23 @@ ARDOUR_UI::transport_goto_end ()
void
ARDOUR_UI::transport_stop ()
{
- if (!session) {
+ if (!_session) {
return;
}
- if (session->is_auditioning()) {
- session->cancel_audition ();
+ if (_session->is_auditioning()) {
+ _session->cancel_audition ();
return;
}
- session->request_stop ();
+ _session->request_stop ();
}
void
ARDOUR_UI::transport_stop_and_forget_capture ()
{
- if (session) {
- session->request_stop (true);
+ if (_session) {
+ _session->request_stop (true);
}
}
@@ -1506,47 +1505,47 @@ void
ARDOUR_UI::transport_record (bool roll)
{
- if (session) {
- switch (session->record_status()) {
+ if (_session) {
+ switch (_session->record_status()) {
case Session::Disabled:
- if (session->ntracks() == 0) {
+ if (_session->ntracks() == 0) {
MessageDialog msg (*editor, _("Please create 1 or more track\nbefore trying to record.\nCheck the Session menu."));
msg.run ();
return;
}
- session->maybe_enable_record ();
+ _session->maybe_enable_record ();
if (roll) {
transport_roll ();
}
break;
case Session::Recording:
if (roll) {
- session->request_stop();
+ _session->request_stop();
} else {
- session->disable_record (false, true);
+ _session->disable_record (false, true);
}
break;
case Session::Enabled:
- session->disable_record (false, true);
+ _session->disable_record (false, true);
}
}
- //cerr << "ARDOUR_UI::transport_record () called roll = " << roll << " session->record_status() = " << session->record_status() << endl;
+ //cerr << "ARDOUR_UI::transport_record () called roll = " << roll << " _session->record_status() = " << _session->record_status() << endl;
}
void
ARDOUR_UI::transport_roll ()
{
- if (!session) {
+ if (!_session) {
return;
}
- if (session->is_auditioning()) {
+ if (_session->is_auditioning()) {
return;
}
- if (session->config.get_external_sync()) {
- switch (session->config.get_sync_source()) {
+ if (_session->config.get_external_sync()) {
+ switch (_session->config.get_sync_source()) {
case JACK:
break;
default:
@@ -1555,16 +1554,16 @@ ARDOUR_UI::transport_roll ()
}
}
- bool rolling = session->transport_rolling();
+ bool rolling = _session->transport_rolling();
- if (session->get_play_loop()) {
- session->request_play_loop (false, true);
- } else if (session->get_play_range ()) {
- session->request_play_range (false, true);
+ if (_session->get_play_loop()) {
+ _session->request_play_loop (false, true);
+ } else if (_session->get_play_range ()) {
+ _session->request_play_range (false, true);
}
if (!rolling) {
- session->request_transport_speed (1.0f);
+ _session->request_transport_speed (1.0f);
}
map_transport_state ();
@@ -1574,17 +1573,17 @@ void
ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode)
{
- if (!session) {
+ if (!_session) {
return;
}
- if (session->is_auditioning()) {
- session->cancel_audition ();
+ if (_session->is_auditioning()) {
+ _session->cancel_audition ();
return;
}
- if (session->config.get_external_sync()) {
- switch (session->config.get_sync_source()) {
+ if (_session->config.get_external_sync()) {
+ switch (_session->config.get_sync_source()) {
case JACK:
break;
default:
@@ -1593,12 +1592,12 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode)
}
}
- bool rolling = session->transport_rolling();
+ bool rolling = _session->transport_rolling();
bool affect_transport = true;
if (rolling && roll_out_of_bounded_mode) {
/* drop out of loop/range playback but leave transport rolling */
- if (session->get_play_loop()) {
+ if (_session->get_play_loop()) {
if (Config->get_seamless_loop()) {
/* the disk buffers contain copies of the loop - we can't
just keep playing, so stop the transport. the user
@@ -1609,18 +1608,18 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode)
/* disk buffers are normal, so we can keep playing */
affect_transport = false;
}
- session->request_play_loop (false, true);
- } else if (session->get_play_range ()) {
+ _session->request_play_loop (false, true);
+ } else if (_session->get_play_range ()) {
affect_transport = false;
- session->request_play_range (0, true);
+ _session->request_play_range (0, true);
}
}
if (affect_transport) {
if (rolling) {
- session->request_stop (with_abort, true);
+ _session->request_stop (with_abort, true);
} else {
- session->request_transport_speed (1.0f);
+ _session->request_transport_speed (1.0f);
}
}
@@ -1630,20 +1629,20 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode)
void
ARDOUR_UI::toggle_session_auto_loop ()
{
- if (session) {
- if (session->get_play_loop()) {
- if (session->transport_rolling()) {
- Location * looploc = session->locations()->auto_loop_location();
+ if (_session) {
+ if (_session->get_play_loop()) {
+ if (_session->transport_rolling()) {
+ Location * looploc = _session->locations()->auto_loop_location();
if (looploc) {
- session->request_locate (looploc->start(), true);
+ _session->request_locate (looploc->start(), true);
}
} else {
- session->request_play_loop (false);
+ _session->request_play_loop (false);
}
} else {
- Location * looploc = session->locations()->auto_loop_location();
+ Location * looploc = _session->locations()->auto_loop_location();
if (looploc) {
- session->request_play_loop (true);
+ _session->request_play_loop (true);
}
}
}
@@ -1652,7 +1651,7 @@ ARDOUR_UI::toggle_session_auto_loop ()
void
ARDOUR_UI::transport_play_selection ()
{
- if (!session) {
+ if (!_session) {
return;
}
@@ -1664,24 +1663,24 @@ ARDOUR_UI::transport_rewind (int option)
{
float current_transport_speed;
- if (session) {
- current_transport_speed = session->transport_speed();
+ if (_session) {
+ current_transport_speed = _session->transport_speed();
if (current_transport_speed >= 0.0f) {
switch (option) {
case 0:
- session->request_transport_speed (-1.0f);
+ _session->request_transport_speed (-1.0f);
break;
case 1:
- session->request_transport_speed (-4.0f);
+ _session->request_transport_speed (-4.0f);
break;
case -1:
- session->request_transport_speed (-0.5f);
+ _session->request_transport_speed (-0.5f);
break;
}
} else {
/* speed up */
- session->request_transport_speed (current_transport_speed * 1.5f);
+ _session->request_transport_speed (current_transport_speed * 1.5f);
}
}
}
@@ -1691,24 +1690,24 @@ ARDOUR_UI::transport_forward (int option)
{
float current_transport_speed;
- if (session) {
- current_transport_speed = session->transport_speed();
+ if (_session) {
+ current_transport_speed = _session->transport_speed();
if (current_transport_speed <= 0.0f) {
switch (option) {
case 0:
- session->request_transport_speed (1.0f);
+ _session->request_transport_speed (1.0f);
break;
case 1:
- session->request_transport_speed (4.0f);
+ _session->request_transport_speed (4.0f);
break;
case -1:
- session->request_transport_speed (0.5f);
+ _session->request_transport_speed (0.5f);
break;
}
} else {
/* speed up */
- session->request_transport_speed (current_transport_speed * 1.5f);
+ _session->request_transport_speed (current_transport_speed * 1.5f);
}
}
@@ -1717,13 +1716,13 @@ ARDOUR_UI::transport_forward (int option)
void
ARDOUR_UI::toggle_record_enable (uint32_t dstream)
{
- if (session == 0) {
+ if (_session == 0) {
return;
}
boost::shared_ptr<Route> r;
- if ((r = session->route_by_remote_id (dstream)) != 0) {
+ if ((r = _session->route_by_remote_id (dstream)) != 0) {
Track* t;
@@ -1731,7 +1730,7 @@ ARDOUR_UI::toggle_record_enable (uint32_t dstream)
t->diskstream()->set_record_enabled (!t->diskstream()->record_enabled());
}
}
- if (session == 0) {
+ if (_session == 0) {
return;
}
}
@@ -1741,7 +1740,7 @@ ARDOUR_UI::map_transport_state ()
{
ENSURE_GUI_THREAD (*this, &ARDOUR_UI::map_transport_state)
- if (!session) {
+ if (!_session) {
auto_loop_button.set_visual_state (0);
play_selection_button.set_visual_state (0);
roll_button.set_visual_state (0);
@@ -1749,7 +1748,7 @@ ARDOUR_UI::map_transport_state ()
return;
}
- float sp = session->transport_speed();
+ float sp = _session->transport_speed();
if (sp == 1.0f) {
shuttle_fract = SHUTTLE_FRACT_SPEED1; /* speed = 1.0, believe it or not */
@@ -1762,13 +1761,13 @@ ARDOUR_UI::map_transport_state ()
if (sp != 0.0) {
- if (session->get_play_range()) {
+ if (_session->get_play_range()) {
play_selection_button.set_visual_state (1);
roll_button.set_visual_state (0);
auto_loop_button.set_visual_state (0);
- } else if (session->get_play_loop ()) {
+ } else if (_session->get_play_loop ()) {
auto_loop_button.set_visual_state (1);
play_selection_button.set_visual_state (0);
@@ -1900,7 +1899,7 @@ void
ARDOUR_UI::update_clocks ()
{
if (!editor || !editor->dragging_playhead()) {
- Clock (session->audible_frame(), false, editor->get_preferred_edit_position()); /* EMIT_SIGNAL */
+ Clock (_session->audible_frame(), false, editor->get_preferred_edit_position()); /* EMIT_SIGNAL */
}
}
@@ -1994,7 +1993,7 @@ ARDOUR_UI::snapshot_session ()
bool do_save = (snapname.length() != 0);
vector<sys::path> p;
- get_state_files_in_directory (session->session_directory().root_path(), p);
+ get_state_files_in_directory (_session->session_directory().root_path(), p);
vector<string> n = get_file_names_no_extension (p);
if (find (n.begin(), n.end(), snapname) != n.end()) {
@@ -2030,14 +2029,14 @@ ARDOUR_UI::save_state (const string & name)
int
ARDOUR_UI::save_state_canfail (string name)
{
- if (session) {
+ if (_session) {
int ret;
if (name.length() == 0) {
- name = session->snap_name();
+ name = _session->snap_name();
}
- if ((ret = session->save_state (name)) != 0) {
+ if ((ret = _session->save_state (name)) != 0) {
return ret;
}
}
@@ -2048,36 +2047,36 @@ ARDOUR_UI::save_state_canfail (string name)
void
ARDOUR_UI::primary_clock_value_changed ()
{
- if (session) {
- session->request_locate (primary_clock.current_time ());
+ if (_session) {
+ _session->request_locate (primary_clock.current_time ());
}
}
void
ARDOUR_UI::big_clock_value_changed ()
{
- if (session) {
- session->request_locate (big_clock.current_time ());
+ if (_session) {
+ _session->request_locate (big_clock.current_time ());
}
}
void
ARDOUR_UI::secondary_clock_value_changed ()
{
- if (session) {
- session->request_locate (secondary_clock.current_time ());
+ if (_session) {
+ _session->request_locate (secondary_clock.current_time ());
}
}
void
ARDOUR_UI::transport_rec_enable_blink (bool onoff)
{
- if (session == 0) {
+ if (_session == 0) {
return;
}
- Session::RecordState const r = session->record_status ();
- bool const h = session->have_rec_enabled_diskstream ();
+ Session::RecordState const r = _session->record_status ();
+ bool const h = _session->have_rec_enabled_diskstream ();
if (r == Session::Enabled || (r == Session::Recording && !h)) {
if (onoff) {
@@ -2105,7 +2104,7 @@ ARDOUR_UI::save_template ()
prompter.set_name (X_("Prompter"));
prompter.set_title (_("Save Mix Template"));
prompter.set_prompt (_("Name for mix template:"));
- prompter.set_initial_text(session->name() + _("-template"));
+ prompter.set_initial_text(_session->name() + _("-template"));
prompter.add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
switch (prompter.run()) {
@@ -2113,7 +2112,7 @@ ARDOUR_UI::save_template ()
prompter.get_result (name);
if (name.length()) {
- session->save_template (name);
+ _session->save_template (name);
}
break;
@@ -2126,7 +2125,7 @@ void
ARDOUR_UI::edit_metadata ()
{
SessionMetadataEditor dialog;
- dialog.set_session (session);
+ dialog.set_session (_session);
editor->ensure_float (dialog);
dialog.run ();
}
@@ -2135,7 +2134,7 @@ void
ARDOUR_UI::import_metadata ()
{
SessionMetadataImporter dialog;
- dialog.set_session (session);
+ dialog.set_session (_session);
editor->ensure_float (dialog);
dialog.run ();
}
@@ -2339,7 +2338,7 @@ ARDOUR_UI::build_session_from_nsd (const Glib::ustring& session_path, const Glib
void
ARDOUR_UI::idle_load (const Glib::ustring& path)
{
- if (session) {
+ if (_session) {
if (Glib::file_test (path, Glib::FILE_TEST_IS_DIR)) {
/* /path/to/foo => /path/to/foo, foo */
load_session (path, basename_nosuffix (path));
@@ -2490,7 +2489,7 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new)
ret = load_session (session_path, session_name, template_name);
if (!ARDOUR_COMMAND_LINE::immediate_save.empty()) {
- session->save_state (ARDOUR_COMMAND_LINE::immediate_save, false);
+ _session->save_state (ARDOUR_COMMAND_LINE::immediate_save, false);
exit (1);
}
}
@@ -2594,14 +2593,14 @@ ARDOUR_UI::load_session (const Glib::ustring& path, const Glib::ustring& snap_na
goto out;
}
- connect_to_session (new_session);
+ set_session (new_session);
session_loaded = true;
goto_editor_window ();
- if (session) {
- session->set_clean ();
+ if (_session) {
+ _session->set_clean ();
}
flush_pending ();
@@ -2653,7 +2652,7 @@ ARDOUR_UI::build_session (const Glib::ustring& path, const Glib::ustring& snap_n
return -1;
}
- connect_to_session (new_session);
+ set_session (new_session);
session_loaded = true;
@@ -2785,7 +2784,7 @@ require some unused files to continue to exist."));
dimage->set_alignment(ALIGN_LEFT, ALIGN_TOP);
- const string dead_sound_directory = session->session_directory().dead_sound_path().to_string();
+ const string dead_sound_directory = _session->session_directory().dead_sound_path().to_string();
@@ -2853,7 +2852,7 @@ require some unused files to continue to exist."));
void
ARDOUR_UI::cleanup ()
{
- if (session == 0) {
+ if (_session == 0) {
/* shouldn't happen: menu item is insensitive */
return;
}
@@ -2895,7 +2894,7 @@ After cleanup, unused audio files will be moved to a \
act->set_sensitive (false);
}
- if (session->cleanup_sources (rep)) {
+ if (_session->cleanup_sources (rep)) {
editor->finish_cleanup ();
return;
}
@@ -2926,14 +2925,14 @@ release an additional\n\
void
ARDOUR_UI::flush_trash ()
{
- if (session == 0) {
+ if (_session == 0) {
/* shouldn't happen: menu item is insensitive */
return;
}
ARDOUR::CleanupReport rep;
- if (session->cleanup_trash_sources (rep)) {
+ if (_session->cleanup_trash_sources (rep)) {
return;
}
@@ -2952,12 +2951,12 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
{
int count;
- if (!session) {
+ if (!_session) {
return;
}
if (add_route_dialog == 0) {
- add_route_dialog = new AddRouteDialog (*session);
+ add_route_dialog = new AddRouteDialog (_session);
if (float_window) {
add_route_dialog->set_transient_for (*float_window);
}
@@ -2987,7 +2986,7 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
string template_path = add_route_dialog->track_template();
if (!template_path.empty()) {
- session->new_route_from_template (count, template_path);
+ _session->new_route_from_template (count, template_path);
return;
}
@@ -3001,7 +3000,7 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
AutoConnectOption oac = Config->get_output_auto_connect();
if (oac & AutoConnectMaster) {
- output_chan = (session->master_out() ? session->master_out()->n_inputs().n_audio() : input_chan);
+ output_chan = (_session->master_out() ? _session->master_out()->n_inputs().n_audio() : input_chan);
} else {
output_chan = input_chan;
}
@@ -3031,8 +3030,8 @@ ARDOUR_UI::mixer_settings () const
{
XMLNode* node = 0;
- if (session) {
- node = session->instant_xml(X_("Mixer"));
+ if (_session) {
+ node = _session->instant_xml(X_("Mixer"));
} else {
node = Config->instant_xml(X_("Mixer"));
}
@@ -3049,8 +3048,8 @@ ARDOUR_UI::editor_settings () const
{
XMLNode* node = 0;
- if (session) {
- node = session->instant_xml(X_("Editor"));
+ if (_session) {
+ node = _session->instant_xml(X_("Editor"));
} else {
node = Config->instant_xml(X_("Editor"));
}
@@ -3098,17 +3097,17 @@ ARDOUR_UI::halt_on_xrun_message ()
void
ARDOUR_UI::xrun_handler(nframes_t where)
{
- if (!session) {
+ if (!_session) {
return;
}
ENSURE_GUI_THREAD (*this, &ARDOUR_UI::xrun_handler, where)
- if (session && Config->get_create_xrun_marker() && session->actively_recording()) {
+ if (_session && Config->get_create_xrun_marker() && _session->actively_recording()) {
create_xrun_marker(where);
}
- if (session && Config->get_stop_recording_on_xrun() && session->actively_recording()) {
+ if (_session && Config->get_stop_recording_on_xrun() && _session->actively_recording()) {
halt_on_xrun_message ();
}
}
@@ -3353,15 +3352,15 @@ ARDOUR_UI::update_transport_clocks (nframes_t pos)
void
ARDOUR_UI::record_state_changed ()
{
- ENSURE_GUI_THREAD (*this, &ARDOUR_UI::record_state_changed)
+ ENSURE_GUI_THREAD (*this, &ARDOUR_UI::record_state_changed);
- if (!session || !big_clock_window) {
+ if (!_session || !big_clock_window) {
/* why bother - the clock isn't visible */
return;
}
- Session::RecordState const r = session->record_status ();
- bool const h = session->have_rec_enabled_diskstream ();
+ Session::RecordState const r = _session->record_status ();
+ bool const h = _session->have_rec_enabled_diskstream ();
if (r == Session::Recording && h) {
big_clock.set_widget_name ("BigClockRecording");
@@ -3373,8 +3372,8 @@ ARDOUR_UI::record_state_changed ()
bool
ARDOUR_UI::first_idle ()
{
- if (session) {
- session->allow_auto_play (true);
+ if (_session) {
+ _session->allow_auto_play (true);
}
if (editor) {
@@ -3394,8 +3393,8 @@ ARDOUR_UI::store_clock_modes ()
node->add_property ((*x)->name().c_str(), enum_2_string ((*x)->mode()));
}
- session->add_extra_xml (*node);
- session->set_dirty ();
+ _session->add_extra_xml (*node);
+ _session->set_dirty ();
}
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index f356db6c0a..d14aa7ce0c 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -61,6 +61,7 @@
#include "ardour/ardour.h"
#include "ardour/types.h"
#include "ardour/utils.h"
+#include "ardour/session_handle.h"
#include "audio_clock.h"
#include "ardour_dialog.h"
@@ -100,7 +101,7 @@ namespace ARDOUR {
extern sigc::signal<void> ColorsChanged;
extern sigc::signal<void> DPIReset;
-class ARDOUR_UI : public Gtkmm2ext::UI
+class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
{
public:
ARDOUR_UI (int *argcp, char **argvp[]);
@@ -132,7 +133,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
nframes_t initial_length);
bool session_is_new() const { return _session_is_new; }
- ARDOUR::Session* the_session() { return session; }
+ ARDOUR::Session* the_session() { return _session; }
bool will_create_new_session_automatically() const {
return _will_create_new_session_automatically;
@@ -255,7 +256,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
private:
ArdourStartup* _startup;
ARDOUR::AudioEngine *engine;
- ARDOUR::Session *session;
Gtk::Tooltips _tooltips;
void goto_editor_window ();
@@ -551,7 +551,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void toggle_roll (bool with_abort, bool roll_out_of_bounded_mode);
bool _session_is_new;
- void connect_to_session (ARDOUR::Session *);
+ void set_session (ARDOUR::Session *);
void connect_dependents_to_session (ARDOUR::Session *);
void we_have_dependents ();
diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc
index 97fb9c742a..ab772389a7 100644
--- a/gtk2_ardour/ardour_ui2.cc
+++ b/gtk2_ardour/ardour_ui2.cc
@@ -468,27 +468,27 @@ ARDOUR_UI::auditioning_changed (bool onoff)
void
ARDOUR_UI::audition_alert_toggle ()
{
- if (session) {
- session->cancel_audition();
+ if (_session) {
+ _session->cancel_audition();
}
}
void
ARDOUR_UI::solo_alert_toggle ()
{
- if (session) {
- session->set_solo (session->get_routes(), !session->soloing());
+ if (_session) {
+ _session->set_solo (_session->get_routes(), !_session->soloing());
}
}
void
ARDOUR_UI::solo_blink (bool onoff)
{
- if (session == 0) {
+ if (_session == 0) {
return;
}
- if (session->soloing()) {
+ if (_session->soloing()) {
if (onoff) {
solo_alert_button.set_state (STATE_ACTIVE);
} else {
@@ -503,13 +503,13 @@ ARDOUR_UI::solo_blink (bool onoff)
void
ARDOUR_UI::sync_blink (bool onoff)
{
- if (session == 0 || !session->config.get_external_sync()) {
+ if (_session == 0 || !_session->config.get_external_sync()) {
/* internal sync */
sync_button.set_visual_state (0);
return;
}
- if (!session->transport_locked()) {
+ if (!_session->transport_locked()) {
/* not locked, so blink on and off according to the onoff argument */
if (onoff) {
@@ -526,11 +526,11 @@ ARDOUR_UI::sync_blink (bool onoff)
void
ARDOUR_UI::audition_blink (bool onoff)
{
- if (session == 0) {
+ if (_session == 0) {
return;
}
- if (session->is_auditioning()) {
+ if (_session->is_auditioning()) {
if (onoff) {
auditioning_alert_button.set_state (STATE_ACTIVE);
} else {
@@ -602,7 +602,7 @@ ARDOUR_UI::set_shuttle_max_speed (float speed)
gint
ARDOUR_UI::shuttle_box_button_press (GdkEventButton* ev)
{
- if (!session) {
+ if (!_session) {
return true;
}
@@ -634,7 +634,7 @@ ARDOUR_UI::shuttle_box_button_press (GdkEventButton* ev)
gint
ARDOUR_UI::shuttle_box_button_release (GdkEventButton* ev)
{
- if (!session) {
+ if (!_session) {
return true;
}
@@ -644,23 +644,23 @@ ARDOUR_UI::shuttle_box_button_release (GdkEventButton* ev)
shuttle_grabbed = false;
shuttle_box.remove_modal_grab ();
if (Config->get_shuttle_behaviour() == Sprung) {
- if (session->config.get_auto_play() || roll_button.get_visual_state()) {
+ if (_session->config.get_auto_play() || roll_button.get_visual_state()) {
shuttle_fract = SHUTTLE_FRACT_SPEED1;
- session->request_transport_speed (1.0);
+ _session->request_transport_speed (1.0);
stop_button.set_visual_state (0);
roll_button.set_visual_state (1);
} else {
shuttle_fract = 0;
- session->request_transport_speed (0.0);
+ _session->request_transport_speed (0.0);
}
shuttle_box.queue_draw ();
}
return true;
case 2:
- if (session->transport_rolling()) {
+ if (_session->transport_rolling()) {
shuttle_fract = SHUTTLE_FRACT_SPEED1;
- session->request_transport_speed (1.0);
+ _session->request_transport_speed (1.0);
stop_button.set_visual_state (0);
roll_button.set_visual_state (1);
} else {
@@ -683,7 +683,7 @@ ARDOUR_UI::shuttle_box_button_release (GdkEventButton* ev)
gint
ARDOUR_UI::shuttle_box_scroll (GdkEventScroll* ev)
{
- if (!session) {
+ if (!_session) {
return true;
}
@@ -708,7 +708,7 @@ ARDOUR_UI::shuttle_box_scroll (GdkEventScroll* ev)
gint
ARDOUR_UI::shuttle_box_motion (GdkEventMotion* ev)
{
- if (!session || !shuttle_grabbed) {
+ if (!_session || !shuttle_grabbed) {
return true;
}
@@ -763,7 +763,7 @@ ARDOUR_UI::use_shuttle_fract (bool force)
semitones = round (shuttle_fract / step);
speed = pow (2.0, (semitones / 12.0));
- session->request_transport_speed (speed);
+ _session->request_transport_speed (speed);
} else {
@@ -778,7 +778,7 @@ ARDOUR_UI::use_shuttle_fract (bool force)
fract = -fract;
}
- session->request_transport_speed (shuttle_max_speed * fract);
+ _session->request_transport_speed (shuttle_max_speed * fract);
}
shuttle_box.queue_draw ();
@@ -834,7 +834,7 @@ ARDOUR_UI::shuttle_style_changed ()
void
ARDOUR_UI::update_speed_display ()
{
- if (!session) {
+ if (!_session) {
if (last_speed_displayed != 0) {
speed_display_label.set_text (_("stop"));
last_speed_displayed = 0;
@@ -843,7 +843,7 @@ ARDOUR_UI::update_speed_display ()
}
char buf[32];
- float x = session->transport_speed ();
+ float x = _session->transport_speed ();
if (x != last_speed_displayed) {
diff --git a/gtk2_ardour/ardour_ui_dependents.cc b/gtk2_ardour/ardour_ui_dependents.cc
index d02fd41def..e1d0054891 100644
--- a/gtk2_ardour/ardour_ui_dependents.cc
+++ b/gtk2_ardour/ardour_ui_dependents.cc
@@ -65,9 +65,9 @@ void
ARDOUR_UI::connect_dependents_to_session (ARDOUR::Session *s)
{
BootMessage (_("Setup Editor"));
- editor->connect_to_session (s);
+ editor->set_session (s);
BootMessage (_("Setup Mixer"));
- mixer->connect_to_session (s);
+ mixer->set_session (s);
/* its safe to do this now */
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc
index 9b9bc3c1e2..9db664199c 100644
--- a/gtk2_ardour/ardour_ui_dialogs.cc
+++ b/gtk2_ardour/ardour_ui_dialogs.cc
@@ -47,25 +47,40 @@ using namespace Gtk;
using namespace Gtkmm2ext;
void
-ARDOUR_UI::connect_to_session (Session *s)
+ARDOUR_UI::set_session (Session *s)
{
- session = s;
+ SessionHandlePtr::set_session (s);
- session->Xrun.connect (sigc::mem_fun(*this, &ARDOUR_UI::xrun_handler));
- session->RecordStateChanged.connect (sigc::mem_fun (*this, &ARDOUR_UI::record_state_changed));
+ if (location_ui) {
+ location_ui->set_session(s);
+ }
+
+ if (route_params) {
+ route_params->set_session (s);
+ }
+
+ primary_clock.set_session (s);
+ secondary_clock.set_session (s);
+ big_clock.set_session (s);
+ preroll_clock.set_session (s);
+ postroll_clock.set_session (s);
+
+ if (!_session) {
+ return;
+ }
/* sensitize menu bar options that are now valid */
ActionManager::set_sensitive (ActionManager::session_sensitive_actions, true);
- ActionManager::set_sensitive (ActionManager::write_sensitive_actions, session->writable());
+ ActionManager::set_sensitive (ActionManager::write_sensitive_actions, _session->writable());
- if (session->locations()->num_range_markers()) {
+ if (_session->locations()->num_range_markers()) {
ActionManager::set_sensitive (ActionManager::range_sensitive_actions, true);
} else {
ActionManager::set_sensitive (ActionManager::range_sensitive_actions, false);
}
- if (!session->control_out()) {
+ if (!_session->control_out()) {
Glib::RefPtr<Action> act = ActionManager::get_action (X_("options"), X_("SoloViaBus"));
if (act) {
act->set_sensitive (false);
@@ -87,19 +102,9 @@ ARDOUR_UI::connect_to_session (Session *s)
ActionManager::set_sensitive (ActionManager::point_selection_sensitive_actions, false);
ActionManager::set_sensitive (ActionManager::playlist_selection_sensitive_actions, false);
- session->locations()->added.connect (sigc::mem_fun (*this, &ARDOUR_UI::handle_locations_change));
- session->locations()->removed.connect (sigc::mem_fun (*this, &ARDOUR_UI::handle_locations_change));
-
rec_button.set_sensitive (true);
shuttle_box.set_sensitive (true);
-
- if (location_ui) {
- location_ui->set_session(s);
- }
-
- if (route_params) {
- route_params->set_session (s);
- }
+ solo_alert_button.set_active (_session->soloing());
setup_session_options ();
@@ -108,30 +113,15 @@ ARDOUR_UI::connect_to_session (Session *s)
Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::sync_blink));
Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::audition_blink));
- /* these are all need to be handled in an RT-safe and MT way, so don't
- do any GUI work, just queue it for handling by the GUI thread.
- */
-
- session->TransportStateChange.connect (sigc::mem_fun(*this, &ARDOUR_UI::map_transport_state));
-
- /* alert the user to these things happening */
-
- session->AuditionActive.connect (sigc::mem_fun(*this, &ARDOUR_UI::auditioning_changed));
- session->SoloActive.connect (sigc::mem_fun(*this, &ARDOUR_UI::soloing_changed));
-
- solo_alert_button.set_active (session->soloing());
+ _session_connections.add_connection (_session->Xrun.connect (sigc::mem_fun(*this, &ARDOUR_UI::xrun_handler)));
+ _session_connections.add_connection (_session->RecordStateChanged.connect (sigc::mem_fun (*this, &ARDOUR_UI::record_state_changed)));
+ _session_connections.add_connection (_session->locations()->added.connect (sigc::mem_fun (*this, &ARDOUR_UI::handle_locations_change)));
+ _session_connections.add_connection (_session->locations()->removed.connect (sigc::mem_fun (*this, &ARDOUR_UI::handle_locations_change)));
+ _session_connections.add_connection (_session->TransportStateChange.connect (sigc::mem_fun(*this, &ARDOUR_UI::map_transport_state)));
+ _session_connections.add_connection (_session->AuditionActive.connect (sigc::mem_fun(*this, &ARDOUR_UI::auditioning_changed)));
+ _session_connections.add_connection (_session->SoloActive.connect (sigc::mem_fun(*this, &ARDOUR_UI::soloing_changed)));
+ _session_connections.add_connection (_session->DirtyChanged.connect (sigc::mem_fun(*this, &ARDOUR_UI::update_autosave)));
- /* update autochange callback on dirty state changing */
-
- session->DirtyChanged.connect (sigc::mem_fun(*this, &ARDOUR_UI::update_autosave));
-
- /* can't be auditioning here */
-
- primary_clock.set_session (s);
- secondary_clock.set_session (s);
- big_clock.set_session (s);
- preroll_clock.set_session (s);
- postroll_clock.set_session (s);
/* Clocks are on by default after we are connected to a session, so show that here.
*/
@@ -160,14 +150,14 @@ ARDOUR_UI::connect_to_session (Session *s)
int
ARDOUR_UI::unload_session (bool hide_stuff)
{
- if (session && session->dirty()) {
+ if (_session && _session->dirty()) {
switch (ask_about_saving_session (_("close"))) {
case -1:
// cancel
return 1;
case 1:
- session->save_state ("");
+ _session->save_state ("");
break;
}
}
@@ -195,14 +185,7 @@ ARDOUR_UI::unload_session (bool hide_stuff)
Blink.clear ();
- primary_clock.set_session (0);
- secondary_clock.set_session (0);
- big_clock.set_session (0);
- preroll_clock.set_session (0);
- postroll_clock.set_session (0);
-
- delete session;
- session = 0;
+ delete _session;
update_buffer_load ();
@@ -231,7 +214,7 @@ ARDOUR_UI::toggle_rc_options_window ()
if (rc_option_editor == 0) {
rc_option_editor = new RCOptionEditor;
rc_option_editor->signal_unmap().connect(sigc::bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleRCOptionsEditor")));
- rc_option_editor->set_session (session);
+ rc_option_editor->set_session (_session);
}
RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("ToggleRCOptionsEditor"));
@@ -251,7 +234,7 @@ void
ARDOUR_UI::toggle_session_options_window ()
{
if (session_option_editor == 0) {
- session_option_editor = new SessionOptionEditor (session);
+ session_option_editor = new SessionOptionEditor (_session);
session_option_editor->signal_unmap().connect(sigc::bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleSessionOptionsEditor")));
}
@@ -273,7 +256,7 @@ ARDOUR_UI::create_location_ui ()
{
if (location_ui == 0) {
location_ui = new LocationUIWindow ();
- location_ui->set_session (session);
+ location_ui->set_session (_session);
location_ui->signal_unmap().connect (sigc::bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleLocations")));
}
return 0;
@@ -340,7 +323,7 @@ void
ARDOUR_UI::create_bundle_manager ()
{
if (bundle_manager == 0) {
- bundle_manager = new BundleManager (session);
+ bundle_manager = new BundleManager (_session);
bundle_manager->signal_unmap().connect (sigc::bind (sigc::ptr_fun (&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleBundleManager")));
}
}
@@ -368,7 +351,7 @@ ARDOUR_UI::create_route_params ()
{
if (route_params == 0) {
route_params = new RouteParams_UI ();
- route_params->set_session (session);
+ route_params->set_session (_session);
route_params->signal_unmap().connect (sigc::bind(sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleInspector")));
}
return 0;
@@ -397,8 +380,8 @@ ARDOUR_UI::toggle_route_params_window ()
void
ARDOUR_UI::handle_locations_change (Location *)
{
- if (session) {
- if (session->locations()->num_range_markers()) {
+ if (_session) {
+ if (_session->locations()->num_range_markers()) {
ActionManager::set_sensitive (ActionManager::range_sensitive_actions, true);
} else {
ActionManager::set_sensitive (ActionManager::range_sensitive_actions, false);
diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc
index 592750a81b..20d492c71b 100644
--- a/gtk2_ardour/ardour_ui_options.cc
+++ b/gtk2_ardour/ardour_ui_options.cc
@@ -49,13 +49,13 @@ using namespace PBD;
void
ARDOUR_UI::toggle_external_sync()
{
- ActionManager::toggle_config_state_foo ("Transport", "ToggleExternalSync", sigc::mem_fun (session->config, &SessionConfiguration::set_external_sync), sigc::mem_fun (session->config, &SessionConfiguration::get_external_sync));
+ ActionManager::toggle_config_state_foo ("Transport", "ToggleExternalSync", sigc::mem_fun (_session->config, &SessionConfiguration::set_external_sync), sigc::mem_fun (_session->config, &SessionConfiguration::get_external_sync));
}
void
ARDOUR_UI::toggle_time_master ()
{
- ActionManager::toggle_config_state_foo ("Transport", "ToggleTimeMaster", sigc::mem_fun (session->config, &SessionConfiguration::set_jack_time_master), sigc::mem_fun (session->config, &SessionConfiguration::get_jack_time_master));
+ ActionManager::toggle_config_state_foo ("Transport", "ToggleTimeMaster", sigc::mem_fun (_session->config, &SessionConfiguration::set_jack_time_master), sigc::mem_fun (_session->config, &SessionConfiguration::get_jack_time_master));
}
void
@@ -91,19 +91,19 @@ ARDOUR_UI::toggle_send_midi_feedback ()
void
ARDOUR_UI::toggle_auto_input ()
{
- ActionManager::toggle_config_state_foo ("Transport", "ToggleAutoInput", sigc::mem_fun (session->config, &SessionConfiguration::set_auto_input), sigc::mem_fun (session->config, &SessionConfiguration::get_auto_input));
+ ActionManager::toggle_config_state_foo ("Transport", "ToggleAutoInput", sigc::mem_fun (_session->config, &SessionConfiguration::set_auto_input), sigc::mem_fun (_session->config, &SessionConfiguration::get_auto_input));
}
void
ARDOUR_UI::toggle_auto_play ()
{
- ActionManager::toggle_config_state_foo ("Transport", "ToggleAutoPlay", sigc::mem_fun (session->config, &SessionConfiguration::set_auto_play), sigc::mem_fun (session->config, &SessionConfiguration::get_auto_play));
+ ActionManager::toggle_config_state_foo ("Transport", "ToggleAutoPlay", sigc::mem_fun (_session->config, &SessionConfiguration::set_auto_play), sigc::mem_fun (_session->config, &SessionConfiguration::get_auto_play));
}
void
ARDOUR_UI::toggle_auto_return ()
{
- ActionManager::toggle_config_state_foo ("Transport", "ToggleAutoReturn", sigc::mem_fun (session->config, &SessionConfiguration::set_auto_return), sigc::mem_fun (session->config, &SessionConfiguration::get_auto_return));
+ ActionManager::toggle_config_state_foo ("Transport", "ToggleAutoReturn", sigc::mem_fun (_session->config, &SessionConfiguration::set_auto_return), sigc::mem_fun (_session->config, &SessionConfiguration::get_auto_return));
}
void
@@ -171,8 +171,8 @@ ARDOUR_UI::toggle_punch_in ()
return;
}
- if (tact->get_active() != session->config.get_punch_in()) {
- session->config.set_punch_in (tact->get_active ());
+ if (tact->get_active() != _session->config.get_punch_in()) {
+ _session->config.set_punch_in (tact->get_active ());
}
if (tact->get_active()) {
@@ -197,8 +197,8 @@ ARDOUR_UI::toggle_punch_out ()
return;
}
- if (tact->get_active() != session->config.get_punch_out()) {
- session->config.set_punch_out (tact->get_active ());
+ if (tact->get_active() != _session->config.get_punch_out()) {
+ _session->config.set_punch_out (tact->get_active ());
}
if (tact->get_active()) {
@@ -234,7 +234,7 @@ ARDOUR_UI::show_loop_punch_ruler_and_disallow_hide ()
void
ARDOUR_UI::reenable_hide_loop_punch_ruler_if_appropriate ()
{
- if (!session->config.get_punch_in() && !session->config.get_punch_out()) {
+ if (!_session->config.get_punch_in() && !_session->config.get_punch_out()) {
/* if punch in/out are now both off, reallow hiding of the loop/punch ruler */
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Rulers"), "toggle-loop-punch-ruler");
if (act) {
@@ -249,7 +249,7 @@ ARDOUR_UI::toggle_video_sync()
Glib::RefPtr<Action> act = ActionManager::get_action ("Transport", "ToggleVideoSync");
if (act) {
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- session->config.set_use_video_sync (tact->get_active());
+ _session->config.set_use_video_sync (tact->get_active());
}
}
@@ -270,19 +270,19 @@ ARDOUR_UI::toggle_editing_space()
void
ARDOUR_UI::setup_session_options ()
{
- session->config.ParameterChanged.connect (sigc::mem_fun (*this, &ARDOUR_UI::parameter_changed));
+ _session->config.ParameterChanged.connect (sigc::mem_fun (*this, &ARDOUR_UI::parameter_changed));
boost::function<void (std::string)> pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1));
- session->config.map_parameters (pc);
+ _session->config.map_parameters (pc);
}
#if 0
void
ARDOUR_UI::handle_sync_change ()
{
- if (!session) {
+ if (!_session) {
return;
}
- if (!session->config.get_external_sync()) {
+ if (!_session->config.get_external_sync()) {
sync_button.set_label (_("Internal"));
ActionManager::get_action ("Transport", "ToggleAutoPlay")->set_sensitive (true);
ActionManager::get_action ("Transport", "ToggleAutoReturn")->set_sensitive (true);
@@ -303,14 +303,14 @@ ARDOUR_UI::parameter_changed (std::string p)
if (p == "external-sync") {
- ActionManager::map_some_state ("Transport", "ToggleExternalSync", sigc::mem_fun (session->config, &SessionConfiguration::get_external_sync));
+ ActionManager::map_some_state ("Transport", "ToggleExternalSync", sigc::mem_fun (_session->config, &SessionConfiguration::get_external_sync));
- if (!session->config.get_external_sync()) {
+ if (!_session->config.get_external_sync()) {
sync_button.set_label (_("Internal"));
ActionManager::get_action ("Transport", "ToggleAutoPlay")->set_sensitive (true);
ActionManager::get_action ("Transport", "ToggleAutoReturn")->set_sensitive (true);
} else {
- sync_button.set_label (sync_source_to_string (session->config.get_sync_source()));
+ sync_button.set_label (sync_source_to_string (_session->config.get_sync_source()));
/* XXX need to make auto-play is off as well as insensitive */
ActionManager::get_action ("Transport", "ToggleAutoPlay")->set_sensitive (false);
ActionManager::get_action ("Transport", "ToggleAutoReturn")->set_sensitive (false);
@@ -339,27 +339,27 @@ ARDOUR_UI::parameter_changed (std::string p)
} else if (p == "midi-feedback") {
ActionManager::map_some_state ("options", "SendMIDIfeedback", &RCConfiguration::get_midi_feedback);
} else if (p == "auto-play") {
- ActionManager::map_some_state ("Transport", "ToggleAutoPlay", sigc::mem_fun (session->config, &SessionConfiguration::get_auto_play));
+ ActionManager::map_some_state ("Transport", "ToggleAutoPlay", sigc::mem_fun (_session->config, &SessionConfiguration::get_auto_play));
} else if (p == "auto-return") {
- ActionManager::map_some_state ("Transport", "ToggleAutoReturn", sigc::mem_fun (session->config, &SessionConfiguration::get_auto_return));
+ ActionManager::map_some_state ("Transport", "ToggleAutoReturn", sigc::mem_fun (_session->config, &SessionConfiguration::get_auto_return));
} else if (p == "auto-input") {
- ActionManager::map_some_state ("Transport", "ToggleAutoInput", sigc::mem_fun (session->config, &SessionConfiguration::get_auto_input));
+ ActionManager::map_some_state ("Transport", "ToggleAutoInput", sigc::mem_fun (_session->config, &SessionConfiguration::get_auto_input));
} else if (p == "punch-out") {
- ActionManager::map_some_state ("Transport", "TogglePunchOut", sigc::mem_fun (session->config, &SessionConfiguration::get_punch_out));
- if (!session->config.get_punch_out()) {
+ ActionManager::map_some_state ("Transport", "TogglePunchOut", sigc::mem_fun (_session->config, &SessionConfiguration::get_punch_out));
+ if (!_session->config.get_punch_out()) {
unset_dual_punch ();
}
} else if (p == "punch-in") {
- ActionManager::map_some_state ("Transport", "TogglePunchIn", sigc::mem_fun (session->config, &SessionConfiguration::get_punch_in));
- if (!session->config.get_punch_in()) {
+ ActionManager::map_some_state ("Transport", "TogglePunchIn", sigc::mem_fun (_session->config, &SessionConfiguration::get_punch_in));
+ if (!_session->config.get_punch_in()) {
unset_dual_punch ();
}
} else if (p == "clicking") {
ActionManager::map_some_state ("Transport", "ToggleClick", &RCConfiguration::get_clicking);
} else if (p == "jack-time-master") {
- ActionManager::map_some_state ("Transport", "ToggleTimeMaster", sigc::mem_fun (session->config, &SessionConfiguration::get_jack_time_master));
+ ActionManager::map_some_state ("Transport", "ToggleTimeMaster", sigc::mem_fun (_session->config, &SessionConfiguration::get_jack_time_master));
} else if (p == "use-video-sync") {
- ActionManager::map_some_state ("Transport", "ToggleVideoSync", sigc::mem_fun (session->config, &SessionConfiguration::get_use_video_sync));
+ ActionManager::map_some_state ("Transport", "ToggleVideoSync", sigc::mem_fun (_session->config, &SessionConfiguration::get_use_video_sync));
} else if (p == "shuttle-behaviour") {
switch (Config->get_shuttle_behaviour ()) {
@@ -367,10 +367,10 @@ ARDOUR_UI::parameter_changed (std::string p)
shuttle_style_button.set_active_text (_("sprung"));
shuttle_fract = 0.0;
shuttle_box.queue_draw ();
- if (session) {
- if (session->transport_rolling()) {
+ if (_session) {
+ if (_session->transport_rolling()) {
shuttle_fract = SHUTTLE_FRACT_SPEED1;
- session->request_transport_speed (1.0);
+ _session->request_transport_speed (1.0);
}
}
break;
@@ -401,9 +401,9 @@ ARDOUR_UI::reset_main_clocks ()
{
ENSURE_GUI_THREAD (*this, &ARDOUR_UI::reset_main_clocks)
- if (session) {
- primary_clock.set (session->audible_frame(), true);
- secondary_clock.set (session->audible_frame(), true);
+ if (_session) {
+ primary_clock.set (_session->audible_frame(), true);
+ secondary_clock.set (_session->audible_frame(), true);
} else {
primary_clock.set (0, true);
secondary_clock.set (0, true);
diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc
index 68df057b95..c37c6cab9c 100644
--- a/gtk2_ardour/audio_clock.cc
+++ b/gtk2_ardour/audio_clock.cc
@@ -64,9 +64,8 @@ const uint32_t AudioClock::field_length[(int) AudioClock::AudioFrames+1] = {
10 /* Audio Frame */
};
-AudioClock::AudioClock (
- std::string clock_name, bool transient, std::string widget_name, bool allow_edit, bool follows_playhead, bool duration, bool with_info
- )
+AudioClock::AudioClock (std::string clock_name, bool transient, std::string widget_name,
+ bool allow_edit, bool follows_playhead, bool duration, bool with_info)
: _name (clock_name),
is_transient (transient),
is_duration (duration),
@@ -81,7 +80,6 @@ AudioClock::AudioClock (
b2 ("|"),
last_when(0)
{
- session = 0;
last_when = 0;
last_pdelta = 0;
last_sdelta = 0;
@@ -419,7 +417,7 @@ void
AudioClock::set (nframes_t when, bool force, nframes_t offset, char which)
{
- if ((!force && !is_visible()) || session == 0) {
+ if ((!force && !is_visible()) || _session == 0) {
return;
}
@@ -501,7 +499,7 @@ AudioClock::set_frames (nframes_t when, bool /*force*/)
audio_frames_label.set_text (buf);
if (frames_upper_info_label) {
- nframes_t rate = session->frame_rate();
+ nframes_t rate = _session->frame_rate();
if (fmod (rate, 1000.0) == 0.000) {
sprintf (buf, "%uK", rate/1000);
@@ -513,7 +511,7 @@ AudioClock::set_frames (nframes_t when, bool /*force*/)
frames_upper_info_label->set_text (buf);
}
- float vid_pullup = session->config.get_video_pullup();
+ float vid_pullup = _session->config.get_video_pullup();
if (vid_pullup == 0.0) {
if (frames_lower_info_label->get_text () != _("none")) {
@@ -538,11 +536,11 @@ AudioClock::set_minsec (nframes_t when, bool force)
float secs;
left = when;
- hrs = (int) floor (left / (session->frame_rate() * 60.0f * 60.0f));
- left -= (nframes_t) floor (hrs * session->frame_rate() * 60.0f * 60.0f);
- mins = (int) floor (left / (session->frame_rate() * 60.0f));
- left -= (nframes_t) floor (mins * session->frame_rate() * 60.0f);
- secs = left / (float) session->frame_rate();
+ hrs = (int) floor (left / (_session->frame_rate() * 60.0f * 60.0f));
+ left -= (nframes_t) floor (hrs * _session->frame_rate() * 60.0f * 60.0f);
+ mins = (int) floor (left / (_session->frame_rate() * 60.0f));
+ left -= (nframes_t) floor (mins * _session->frame_rate() * 60.0f);
+ secs = left / (float) _session->frame_rate();
if (force || hrs != ms_last_hrs) {
sprintf (buf, "%02d", hrs);
@@ -570,9 +568,9 @@ AudioClock::set_timecode (nframes_t when, bool force)
Timecode::Time timecode;
if (is_duration) {
- session->timecode_duration (when, timecode);
+ _session->timecode_duration (when, timecode);
} else {
- session->timecode_time (when, timecode);
+ _session->timecode_time (when, timecode);
}
if (force || timecode.hours != last_hrs || timecode.negative != last_negative) {
@@ -605,7 +603,7 @@ AudioClock::set_timecode (nframes_t when, bool force)
}
if (timecode_upper_info_label) {
- double timecode_frames = session->timecode_frames_per_second();
+ double timecode_frames = _session->timecode_frames_per_second();
if ( fmod(timecode_frames, 1.0) == 0.0) {
sprintf (buf, "%u", int (timecode_frames));
@@ -618,7 +616,7 @@ AudioClock::set_timecode (nframes_t when, bool force)
}
if ((fabs(timecode_frames - 29.97) < 0.0001) || timecode_frames == 30) {
- if (session->timecode_drop_frames()) {
+ if (_session->timecode_drop_frames()) {
sprintf (buf, "DF");
} else {
sprintf (buf, "NDF");
@@ -647,12 +645,12 @@ AudioClock::set_bbt (nframes_t when, bool force)
bbt.beats = 0;
bbt.ticks = 0;
} else {
- session->tempo_map().bbt_time (when, bbt);
+ _session->tempo_map().bbt_time (when, bbt);
bbt.bars--;
bbt.beats--;
}
} else {
- session->tempo_map().bbt_time (when, bbt);
+ _session->tempo_map().bbt_time (when, bbt);
}
sprintf (buf, "%03" PRIu32, bbt.bars);
@@ -677,7 +675,7 @@ AudioClock::set_bbt (nframes_t when, bool force)
pos = bbt_reference_time;
}
- TempoMetric m (session->tempo_map().metric_at (pos));
+ TempoMetric m (_session->tempo_map().metric_at (pos));
sprintf (buf, "%-5.2f", m.tempo().beats_per_minute());
if (bbt_lower_info_label->get_text() != buf) {
@@ -693,12 +691,12 @@ AudioClock::set_bbt (nframes_t when, bool force)
void
AudioClock::set_session (Session *s)
{
- session = s;
+ SessionHandlePtr::set_session (s);
- if (s) {
+ if (_session) {
XMLProperty* prop;
- XMLNode* node = session->extra_xml (X_("ClockModes"));
+ XMLNode* node = _session->extra_xml (X_("ClockModes"));
AudioClock::Mode amode;
if (node) {
@@ -1190,7 +1188,7 @@ AudioClock::field_button_release_event (GdkEventButton *ev, Field field)
bool
AudioClock::field_button_press_event (GdkEventButton *ev, Field /*field*/)
{
- if (session == 0) {
+ if (_session == 0) {
return false;
}
@@ -1236,7 +1234,7 @@ AudioClock::field_button_press_event (GdkEventButton *ev, Field /*field*/)
bool
AudioClock::field_button_scroll_event (GdkEventScroll *ev, Field field)
{
- if (session == 0) {
+ if (_session == 0) {
return false;
}
@@ -1283,7 +1281,7 @@ AudioClock::field_button_scroll_event (GdkEventScroll *ev, Field field)
bool
AudioClock::field_motion_notify_event (GdkEventMotion *ev, Field field)
{
- if (session == 0 || !dragging) {
+ if (_session == 0 || !dragging) {
return false;
}
@@ -1342,16 +1340,16 @@ AudioClock::get_frames (Field field,nframes_t pos,int dir)
BBT_Time bbt;
switch (field) {
case Timecode_Hours:
- frames = (nframes_t) floor (3600.0 * session->frame_rate());
+ frames = (nframes_t) floor (3600.0 * _session->frame_rate());
break;
case Timecode_Minutes:
- frames = (nframes_t) floor (60.0 * session->frame_rate());
+ frames = (nframes_t) floor (60.0 * _session->frame_rate());
break;
case Timecode_Seconds:
- frames = session->frame_rate();
+ frames = _session->frame_rate();
break;
case Timecode_Frames:
- frames = (nframes_t) floor (session->frame_rate() / session->timecode_frames_per_second());
+ frames = (nframes_t) floor (_session->frame_rate() / _session->timecode_frames_per_second());
break;
case AudioFrames:
@@ -1359,32 +1357,32 @@ AudioClock::get_frames (Field field,nframes_t pos,int dir)
break;
case MS_Hours:
- frames = (nframes_t) floor (3600.0 * session->frame_rate());
+ frames = (nframes_t) floor (3600.0 * _session->frame_rate());
break;
case MS_Minutes:
- frames = (nframes_t) floor (60.0 * session->frame_rate());
+ frames = (nframes_t) floor (60.0 * _session->frame_rate());
break;
case MS_Seconds:
- frames = session->frame_rate();
+ frames = _session->frame_rate();
break;
case Bars:
bbt.bars = 1;
bbt.beats = 0;
bbt.ticks = 0;
- frames = session->tempo_map().bbt_duration_at(pos,bbt,dir);
+ frames = _session->tempo_map().bbt_duration_at(pos,bbt,dir);
break;
case Beats:
bbt.bars = 0;
bbt.beats = 1;
bbt.ticks = 0;
- frames = session->tempo_map().bbt_duration_at(pos,bbt,dir);
+ frames = _session->tempo_map().bbt_duration_at(pos,bbt,dir);
break;
case Ticks:
bbt.bars = 0;
bbt.beats = 0;
bbt.ticks = 1;
- frames = session->tempo_map().bbt_duration_at(pos,bbt,dir);
+ frames = _session->tempo_map().bbt_duration_at(pos,bbt,dir);
break;
}
@@ -1459,7 +1457,7 @@ AudioClock::timecode_sanitize_display()
seconds_label.set_text("59");
}
- switch ((long)rint(session->timecode_frames_per_second())) {
+ switch ((long)rint(_session->timecode_frames_per_second())) {
case 24:
if (atoi(frames_label.get_text()) > 23) {
frames_label.set_text("23");
@@ -1479,7 +1477,7 @@ AudioClock::timecode_sanitize_display()
break;
}
- if (session->timecode_drop_frames()) {
+ if (_session->timecode_drop_frames()) {
if ((atoi(minutes_label.get_text()) % 10) && (atoi(seconds_label.get_text()) == 0) && (atoi(frames_label.get_text()) < 2)) {
frames_label.set_text("02");
}
@@ -1489,7 +1487,7 @@ AudioClock::timecode_sanitize_display()
nframes_t
AudioClock::timecode_frame_from_display () const
{
- if (session == 0) {
+ if (_session == 0) {
return 0;
}
@@ -1500,10 +1498,10 @@ AudioClock::timecode_frame_from_display () const
timecode.minutes = atoi (minutes_label.get_text());
timecode.seconds = atoi (seconds_label.get_text());
timecode.frames = atoi (frames_label.get_text());
- timecode.rate = session->timecode_frames_per_second();
- timecode.drop= session->timecode_drop_frames();
+ timecode.rate = _session->timecode_frames_per_second();
+ timecode.drop= _session->timecode_drop_frames();
- session->timecode_to_sample( timecode, sample, false /* use_offset */, false /* use_subframes */ );
+ _session->timecode_to_sample( timecode, sample, false /* use_offset */, false /* use_subframes */ );
#if 0
@@ -1522,14 +1520,14 @@ AudioClock::timecode_frame_from_display () const
Timecode::Time timecode2;
nframes_t sample_increment;
- sample_increment = (long)rint(session->frame_rate() / session->timecode_frames_per_second);
+ sample_increment = (long)rint(_session->frame_rate() / _session->timecode_frames_per_second);
#ifdef Timecode_SAMPLE_TEST_1
// Test 1: use_offset = false, use_subframes = false
cout << "use_offset = false, use_subframes = false" << endl;
for (int i = 0; i < 108003; i++) {
- session->timecode_to_sample( timecode1, sample1, false /* use_offset */, false /* use_subframes */ );
- session->sample_to_timecode( sample1, timecode2, false /* use_offset */, false /* use_subframes */ );
+ _session->timecode_to_sample( timecode1, sample1, false /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode( sample1, timecode2, false /* use_offset */, false /* use_subframes */ );
if ((i > 0) && ( ((sample1 - oldsample) != sample_increment) && ((sample1 - oldsample) != (sample_increment + 1)) && ((sample1 - oldsample) != (sample_increment - 1)))) {
cout << "ERROR: sample increment not right: " << (sample1 - oldsample) << " != " << sample_increment << endl;
@@ -1549,7 +1547,7 @@ AudioClock::timecode_frame_from_display () const
break;
}
oldsample = sample1;
- session->timecode_increment( timecode1 );
+ _session->timecode_increment( timecode1 );
}
cout << "sample_increment: " << sample_increment << endl;
@@ -1568,13 +1566,13 @@ AudioClock::timecode_frame_from_display () const
timecode1.subframes = 0;
sample1 = oldsample = 0;
- session->sample_to_timecode( sample1, timecode1, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode( sample1, timecode1, true /* use_offset */, false /* use_subframes */ );
cout << "Starting at sample: " << sample1 << " -> ";
cout << "timecode: " << (timecode1.negative ? "-" : "") << timecode1.hours << ":" << timecode1.minutes << ":" << timecode1.seconds << ":" << timecode1.frames << "::" << timecode1.subframes << endl;
for (int i = 0; i < 108003; i++) {
- session->timecode_to_sample( timecode1, sample1, true /* use_offset */, false /* use_subframes */ );
- session->sample_to_timecode( sample1, timecode2, true /* use_offset */, false /* use_subframes */ );
+ _session->timecode_to_sample( timecode1, sample1, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode( sample1, timecode2, true /* use_offset */, false /* use_subframes */ );
// cout << "timecode: " << (timecode1.negative ? "-" : "") << timecode1.hours << ":" << timecode1.minutes << ":" << timecode1.seconds << ":" << timecode1.frames << "::" << timecode1.subframes << " -> ";
// cout << "sample: " << sample1 << endl;
@@ -1599,7 +1597,7 @@ AudioClock::timecode_frame_from_display () const
break;
}
oldsample = sample1;
- session->timecode_increment( timecode1 );
+ _session->timecode_increment( timecode1 );
}
cout << "sample_increment: " << sample_increment << endl;
@@ -1611,13 +1609,13 @@ AudioClock::timecode_frame_from_display () const
// Test 3: use_offset = true, use_subframes = false, decrement
cout << "use_offset = true, use_subframes = false, decrement" << endl;
- session->sample_to_timecode( sample1, timecode1, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode( sample1, timecode1, true /* use_offset */, false /* use_subframes */ );
cout << "Starting at sample: " << sample1 << " -> ";
cout << "timecode: " << (timecode1.negative ? "-" : "") << timecode1.hours << ":" << timecode1.minutes << ":" << timecode1.seconds << ":" << timecode1.frames << "::" << timecode1.subframes << endl;
for (int i = 0; i < 108003; i++) {
- session->timecode_to_sample( timecode1, sample1, true /* use_offset */, false /* use_subframes */ );
- session->sample_to_timecode( sample1, timecode2, true /* use_offset */, false /* use_subframes */ );
+ _session->timecode_to_sample( timecode1, sample1, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode( sample1, timecode2, true /* use_offset */, false /* use_subframes */ );
// cout << "timecode: " << (timecode1.negative ? "-" : "") << timecode1.hours << ":" << timecode1.minutes << ":" << timecode1.seconds << ":" << timecode1.frames << "::" << timecode1.subframes << " -> ";
// cout << "sample: " << sample1 << endl;
@@ -1642,7 +1640,7 @@ AudioClock::timecode_frame_from_display () const
break;
}
oldsample = sample1;
- session->timecode_decrement( timecode1 );
+ _session->timecode_decrement( timecode1 );
}
cout << "sample_decrement: " << sample_increment << endl;
@@ -1663,14 +1661,14 @@ AudioClock::timecode_frame_from_display () const
timecode1.subframes = 0;
sample1 = oldsample = (sample_increment * sub) / 80;
- session->sample_to_timecode( sample1, timecode1, true /* use_offset */, true /* use_subframes */ );
+ _session->sample_to_timecode( sample1, timecode1, true /* use_offset */, true /* use_subframes */ );
cout << "starting at sample: " << sample1 << " -> ";
cout << "timecode: " << (timecode1.negative ? "-" : "") << timecode1.hours << ":" << timecode1.minutes << ":" << timecode1.seconds << ":" << timecode1.frames << "::" << timecode1.subframes << endl;
for (int i = 0; i < 108003; i++) {
- session->timecode_to_sample( timecode1, sample1, true /* use_offset */, true /* use_subframes */ );
- session->sample_to_timecode( sample1, timecode2, true /* use_offset */, true /* use_subframes */ );
+ _session->timecode_to_sample( timecode1, sample1, true /* use_offset */, true /* use_subframes */ );
+ _session->sample_to_timecode( sample1, timecode2, true /* use_offset */, true /* use_subframes */ );
if ((i > 0) && ( ((sample1 - oldsample) != sample_increment) && ((sample1 - oldsample) != (sample_increment + 1)) && ((sample1 - oldsample) != (sample_increment - 1)))) {
cout << "ERROR: sample increment not right: " << (sample1 - oldsample) << " != " << sample_increment << endl;
@@ -1690,7 +1688,7 @@ AudioClock::timecode_frame_from_display () const
break;
}
oldsample = sample1;
- session->timecode_increment( timecode1 );
+ _session->timecode_increment( timecode1 );
}
cout << "sample_increment: " << sample_increment << endl;
@@ -1698,8 +1696,8 @@ AudioClock::timecode_frame_from_display () const
cout << "timecode: " << (timecode2.negative ? "-" : "") << timecode2.hours << ":" << timecode2.minutes << ":" << timecode2.seconds << ":" << timecode2.frames << "::" << timecode2.subframes << endl;
for (int i = 0; i < 108003; i++) {
- session->timecode_to_sample( timecode1, sample1, true /* use_offset */, true /* use_subframes */ );
- session->sample_to_timecode( sample1, timecode2, true /* use_offset */, true /* use_subframes */ );
+ _session->timecode_to_sample( timecode1, sample1, true /* use_offset */, true /* use_subframes */ );
+ _session->sample_to_timecode( sample1, timecode2, true /* use_offset */, true /* use_subframes */ );
if ((i > 0) && ( ((oldsample - sample1) != sample_increment) && ((oldsample - sample1) != (sample_increment + 1)) && ((oldsample - sample1) != (sample_increment - 1)))) {
cout << "ERROR: sample increment not right: " << (oldsample - sample1) << " != " << sample_increment << endl;
@@ -1719,7 +1717,7 @@ AudioClock::timecode_frame_from_display () const
break;
}
oldsample = sample1;
- session->timecode_decrement( timecode1 );
+ _session->timecode_decrement( timecode1 );
}
cout << "sample_decrement: " << sample_increment << endl;
@@ -1739,15 +1737,15 @@ AudioClock::timecode_frame_from_display () const
timecode1.frames = 0;
timecode1.subframes = 0;
sample1 = oldsample = 0;
- sample_increment = session->frame_rate();
+ sample_increment = _session->frame_rate();
- session->sample_to_timecode( sample1, timecode1, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode( sample1, timecode1, true /* use_offset */, false /* use_subframes */ );
cout << "Starting at sample: " << sample1 << " -> ";
cout << "timecode: " << (timecode1.negative ? "-" : "") << timecode1.hours << ":" << timecode1.minutes << ":" << timecode1.seconds << ":" << timecode1.frames << "::" << timecode1.subframes << endl;
for (int i = 0; i < 3600; i++) {
- session->timecode_to_sample( timecode1, sample1, true /* use_offset */, false /* use_subframes */ );
- session->sample_to_timecode( sample1, timecode2, true /* use_offset */, false /* use_subframes */ );
+ _session->timecode_to_sample( timecode1, sample1, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode( sample1, timecode2, true /* use_offset */, false /* use_subframes */ );
// cout << "timecode: " << (timecode1.negative ? "-" : "") << timecode1.hours << ":" << timecode1.minutes << ":" << timecode1.seconds << ":" << timecode1.frames << "::" << timecode1.subframes << " -> ";
// cout << "sample: " << sample1 << endl;
@@ -1769,7 +1767,7 @@ AudioClock::timecode_frame_from_display () const
break;
}
oldsample = sample1;
- session->timecode_increment_seconds( timecode1 );
+ _session->timecode_increment_seconds( timecode1 );
}
cout << "sample_increment: " << sample_increment << endl;
@@ -1788,15 +1786,15 @@ AudioClock::timecode_frame_from_display () const
timecode1.frames = 0;
timecode1.subframes = 0;
sample1 = oldsample = 0;
- sample_increment = session->frame_rate() * 60;
+ sample_increment = _session->frame_rate() * 60;
- session->sample_to_timecode( sample1, timecode1, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode( sample1, timecode1, true /* use_offset */, false /* use_subframes */ );
cout << "Starting at sample: " << sample1 << " -> ";
cout << "timecode: " << (timecode1.negative ? "-" : "") << timecode1.hours << ":" << timecode1.minutes << ":" << timecode1.seconds << ":" << timecode1.frames << "::" << timecode1.subframes << endl;
for (int i = 0; i < 60; i++) {
- session->timecode_to_sample( timecode1, sample1, true /* use_offset */, false /* use_subframes */ );
- session->sample_to_timecode( sample1, timecode2, true /* use_offset */, false /* use_subframes */ );
+ _session->timecode_to_sample( timecode1, sample1, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode( sample1, timecode2, true /* use_offset */, false /* use_subframes */ );
// cout << "timecode: " << (timecode1.negative ? "-" : "") << timecode1.hours << ":" << timecode1.minutes << ":" << timecode1.seconds << ":" << timecode1.frames << "::" << timecode1.subframes << " -> ";
// cout << "sample: " << sample1 << endl;
@@ -1818,7 +1816,7 @@ AudioClock::timecode_frame_from_display () const
break;
}
oldsample = sample1;
- session->timecode_increment_minutes( timecode1 );
+ _session->timecode_increment_minutes( timecode1 );
}
cout << "sample_increment: " << sample_increment << endl;
@@ -1836,15 +1834,15 @@ AudioClock::timecode_frame_from_display () const
timecode1.frames = 0;
timecode1.subframes = 0;
sample1 = oldsample = 0;
- sample_increment = session->frame_rate() * 60 * 60;
+ sample_increment = _session->frame_rate() * 60 * 60;
- session->sample_to_timecode( sample1, timecode1, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode( sample1, timecode1, true /* use_offset */, false /* use_subframes */ );
cout << "Starting at sample: " << sample1 << " -> ";
cout << "timecode: " << (timecode1.negative ? "-" : "") << timecode1.hours << ":" << timecode1.minutes << ":" << timecode1.seconds << ":" << timecode1.frames << "::" << timecode1.subframes << endl;
for (int i = 0; i < 10; i++) {
- session->timecode_to_sample( timecode1, sample1, true /* use_offset */, false /* use_subframes */ );
- session->sample_to_timecode( sample1, timecode2, true /* use_offset */, false /* use_subframes */ );
+ _session->timecode_to_sample( timecode1, sample1, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode( sample1, timecode2, true /* use_offset */, false /* use_subframes */ );
// cout << "timecode: " << (timecode1.negative ? "-" : "") << timecode1.hours << ":" << timecode1.minutes << ":" << timecode1.seconds << ":" << timecode1.frames << "::" << timecode1.subframes << " -> ";
// cout << "sample: " << sample1 << endl;
@@ -1866,7 +1864,7 @@ AudioClock::timecode_frame_from_display () const
break;
}
oldsample = sample1;
- session->timecode_increment_hours( timecode1 );
+ _session->timecode_increment_hours( timecode1 );
}
cout << "sample_increment: " << sample_increment << endl;
@@ -1882,7 +1880,7 @@ AudioClock::timecode_frame_from_display () const
nframes_t
AudioClock::minsec_frame_from_display () const
{
- if (session == 0) {
+ if (_session == 0) {
return 0;
}
@@ -1890,7 +1888,7 @@ AudioClock::minsec_frame_from_display () const
int mins = atoi (ms_minutes_label.get_text());
float secs = atof (ms_seconds_label.get_text());
- nframes_t sr = session->frame_rate();
+ nframes_t sr = _session->frame_rate();
return (nframes_t) floor ((hrs * 60.0f * 60.0f * sr) + (mins * 60.0f * sr) + (secs * sr));
}
@@ -1898,7 +1896,7 @@ AudioClock::minsec_frame_from_display () const
nframes_t
AudioClock::bbt_frame_from_display (nframes_t pos) const
{
- if (session == 0) {
+ if (_session == 0) {
error << "AudioClock::current_time() called with BBT mode but without session!" << endmsg;
return 0;
}
@@ -1915,7 +1913,7 @@ AudioClock::bbt_frame_from_display (nframes_t pos) const
any.bbt.beats++;
}
- nframes_t ret = session->convert_to_frames_at (pos, any);
+ nframes_t ret = _session->convert_to_frames_at (pos, any);
return ret;
}
@@ -1924,7 +1922,7 @@ AudioClock::bbt_frame_from_display (nframes_t pos) const
nframes_t
AudioClock::bbt_frame_duration_from_display (nframes_t pos) const
{
- if (session == 0) {
+ if (_session == 0) {
error << "AudioClock::current_time() called with BBT mode but without session!" << endmsg;
return 0;
}
@@ -1936,7 +1934,7 @@ AudioClock::bbt_frame_duration_from_display (nframes_t pos) const
bbt.beats = atoi (beats_label.get_text());
bbt.ticks = atoi (ticks_label.get_text());
- return session->tempo_map().bbt_duration_at(pos,bbt,1);
+ return _session->tempo_map().bbt_duration_at(pos,bbt,1);
}
nframes_t
@@ -1971,21 +1969,21 @@ AudioClock::build_ops_menu ()
void
AudioClock::set_from_playhead ()
{
- if (!session) {
+ if (!_session) {
return;
}
- set (session->transport_frame());
+ set (_session->transport_frame());
}
void
AudioClock::locate ()
{
- if (!session || is_duration) {
+ if (!_session || is_duration) {
return;
}
- session->request_locate (current_time(), false);
+ _session->request_locate (current_time(), false);
}
void
diff --git a/gtk2_ardour/audio_clock.h b/gtk2_ardour/audio_clock.h
index 38bb3f1329..1a15cecd7b 100644
--- a/gtk2_ardour/audio_clock.h
+++ b/gtk2_ardour/audio_clock.h
@@ -26,12 +26,13 @@
#include <gtkmm/label.h>
#include <gtkmm/frame.h>
#include "ardour/ardour.h"
+#include "ardour/session_handle.h"
namespace ARDOUR {
class Session;
}
-class AudioClock : public Gtk::HBox
+class AudioClock : public Gtk::HBox, public ARDOUR::SessionHandlePtr
{
public:
enum Mode {
@@ -72,7 +73,6 @@ class AudioClock : public Gtk::HBox
static bool has_focus() { return _has_focus; }
private:
- ARDOUR::Session *session;
Mode _mode;
uint32_t key_entry_state;
std::string _name;
diff --git a/gtk2_ardour/audio_region_editor.cc b/gtk2_ardour/audio_region_editor.cc
index ade0b8edb9..2c26f562ff 100644
--- a/gtk2_ardour/audio_region_editor.cc
+++ b/gtk2_ardour/audio_region_editor.cc
@@ -41,7 +41,7 @@ using namespace PBD;
using namespace std;
using namespace Gtkmm2ext;
-AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion> r, AudioRegionView& rv)
+AudioRegionEditor::AudioRegionEditor (Session* s, boost::shared_ptr<AudioRegion> r, AudioRegionView& rv)
: RegionEditor (s),
_region (r),
_region_view (rv),
@@ -58,12 +58,12 @@ AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion>
gain_adjustment(accurate_coefficient_to_dB(_region->scale_amplitude()), -40.0, +40.0, 0.1, 1.0, 0)
{
- position_clock.set_session (&_session);
- end_clock.set_session (&_session);
- length_clock.set_session (&_session);
- sync_offset_relative_clock.set_session (&_session);
- sync_offset_absolute_clock.set_session (&_session);
- start_clock.set_session (&_session);
+ position_clock.set_session (_session);
+ end_clock.set_session (_session);
+ length_clock.set_session (_session);
+ sync_offset_relative_clock.set_session (_session);
+ sync_offset_absolute_clock.set_session (_session);
+ start_clock.set_session (_session);
name_entry.set_name ("AudioRegionEditorEntry");
name_label.set_name ("AudioRegionEditorLabel");
@@ -228,13 +228,13 @@ AudioRegionEditor::connect_editor_events ()
gain_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &AudioRegionEditor::gain_adjustment_changed));
audition_button.signal_toggled().connect (sigc::mem_fun(*this, &AudioRegionEditor::audition_button_toggled));
- _session.AuditionActive.connect (sigc::mem_fun(*this, &AudioRegionEditor::audition_state_changed));
+ _session->AuditionActive.connect (sigc::mem_fun(*this, &AudioRegionEditor::audition_state_changed));
}
void
AudioRegionEditor::position_clock_changed ()
{
- _session.begin_reversible_command (_("change region start position"));
+ _session->begin_reversible_command (_("change region start position"));
boost::shared_ptr<Playlist> pl = _region->playlist();
@@ -242,16 +242,16 @@ AudioRegionEditor::position_clock_changed ()
XMLNode &before = pl->get_state();
_region->set_position (position_clock.current_time(), this);
XMLNode &after = pl->get_state();
- _session.add_command(new MementoCommand<Playlist>(*pl, &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*pl, &before, &after));
}
- _session.commit_reversible_command ();
+ _session->commit_reversible_command ();
}
void
AudioRegionEditor::end_clock_changed ()
{
- _session.begin_reversible_command (_("change region end position"));
+ _session->begin_reversible_command (_("change region end position"));
boost::shared_ptr<Playlist> pl = _region->playlist();
@@ -259,10 +259,10 @@ AudioRegionEditor::end_clock_changed ()
XMLNode &before = pl->get_state();
_region->trim_end (end_clock.current_time(), this);
XMLNode &after = pl->get_state();
- _session.add_command(new MementoCommand<Playlist>(*pl, &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*pl, &before, &after));
}
- _session.commit_reversible_command ();
+ _session->commit_reversible_command ();
end_clock.set (_region->position() + _region->length() - 1, true);
}
@@ -272,7 +272,7 @@ AudioRegionEditor::length_clock_changed ()
{
nframes_t frames = length_clock.current_time();
- _session.begin_reversible_command (_("change region length"));
+ _session->begin_reversible_command (_("change region length"));
boost::shared_ptr<Playlist> pl = _region->playlist();
@@ -280,10 +280,10 @@ AudioRegionEditor::length_clock_changed ()
XMLNode &before = pl->get_state();
_region->trim_end (_region->position() + frames - 1, this);
XMLNode &after = pl->get_state();
- _session.add_command(new MementoCommand<Playlist>(*pl, &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*pl, &before, &after));
}
- _session.commit_reversible_command ();
+ _session->commit_reversible_command ();
length_clock.set (_region->length());
}
@@ -310,9 +310,9 @@ void
AudioRegionEditor::audition_button_toggled ()
{
if (audition_button.get_active()) {
- _session.audition_region (_region);
+ _session->audition_region (_region);
} else {
- _session.cancel_audition ();
+ _session->cancel_audition ();
}
}
@@ -385,27 +385,27 @@ AudioRegionEditor::audition_state_changed (bool yn)
void
AudioRegionEditor::sync_offset_absolute_clock_changed ()
{
- _session.begin_reversible_command (_("change region sync point"));
+ _session->begin_reversible_command (_("change region sync point"));
XMLNode& before = _region->get_state ();
_region->set_sync_position (sync_offset_absolute_clock.current_time());
XMLNode& after = _region->get_state ();
- _session.add_command (new MementoCommand<AudioRegion> (*_region.get(), &before, &after));
+ _session->add_command (new MementoCommand<AudioRegion> (*_region.get(), &before, &after));
- _session.commit_reversible_command ();
+ _session->commit_reversible_command ();
}
void
AudioRegionEditor::sync_offset_relative_clock_changed ()
{
- _session.begin_reversible_command (_("change region sync point"));
+ _session->begin_reversible_command (_("change region sync point"));
XMLNode& before = _region->get_state ();
_region->set_sync_position (sync_offset_relative_clock.current_time() + _region->position ());
XMLNode& after = _region->get_state ();
- _session.add_command (new MementoCommand<AudioRegion> (*_region.get(), &before, &after));
+ _session->add_command (new MementoCommand<AudioRegion> (*_region.get(), &before, &after));
- _session.commit_reversible_command ();
+ _session->commit_reversible_command ();
}
bool
diff --git a/gtk2_ardour/audio_region_editor.h b/gtk2_ardour/audio_region_editor.h
index 3de1522734..f4c99917d8 100644
--- a/gtk2_ardour/audio_region_editor.h
+++ b/gtk2_ardour/audio_region_editor.h
@@ -51,7 +51,7 @@ class AudioRegionView;
class AudioRegionEditor : public RegionEditor
{
public:
- AudioRegionEditor (ARDOUR::Session&, boost::shared_ptr<ARDOUR::AudioRegion>, AudioRegionView& rv);
+ AudioRegionEditor (ARDOUR::Session*, boost::shared_ptr<ARDOUR::AudioRegion>, AudioRegionView& rv);
~AudioRegionEditor ();
private:
diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc
index 682287bf59..30c426567f 100644
--- a/gtk2_ardour/audio_region_view.cc
+++ b/gtk2_ardour/audio_region_view.cc
@@ -200,15 +200,14 @@ AudioRegionView::init (Gdk::Color const & basic_color, bool wfd)
setup_fade_handle_positions ();
- if (!trackview.session().config.get_show_region_fades()) {
+ if (!trackview.session()->config.get_show_region_fades()) {
set_fade_visibility (false);
}
const string line_name = _region->name() + ":gain";
if (!Profile->get_sae()) {
- gain_line = new AudioRegionGainLine (line_name, trackview.session(), *this, *group,
- audio_region()->envelope());
+ gain_line = new AudioRegionGainLine (line_name, *this, *group, audio_region()->envelope());
}
if (!(_flags & EnvelopeVisible)) {
@@ -360,7 +359,7 @@ AudioRegionView::region_renamed ()
{
Glib::ustring str = RegionView::make_name ();
- if (audio_region()->speed_mismatch (trackview.session().frame_rate())) {
+ if (audio_region()->speed_mismatch (trackview.session()->frame_rate())) {
str = string ("*") + str;
}
@@ -415,7 +414,7 @@ AudioRegionView::reset_width_dependent_items (double pixel_width)
fade_in_handle->hide();
fade_out_handle->hide();
} else {
- if (trackview.session().config.get_show_region_fades()) {
+ if (trackview.session()->config.get_show_region_fades()) {
fade_in_handle->show();
fade_out_handle->show();
}
@@ -575,7 +574,7 @@ AudioRegionView::reset_fade_in_shape_width (nframes_t width)
return;
}
- if (trackview.session().config.get_show_region_fades()) {
+ if (trackview.session()->config.get_show_region_fades()) {
fade_in_shape->show();
}
@@ -666,7 +665,7 @@ AudioRegionView::reset_fade_out_shape_width (nframes_t width)
return;
}
- if (trackview.session().config.get_show_region_fades()) {
+ if (trackview.session()->config.get_show_region_fades()) {
fade_out_shape->show();
}
@@ -869,7 +868,7 @@ AudioRegionView::create_waves ()
// cerr << "\tchannel " << n << endl;
if (wait_for_data) {
- if (audio_region()->audio_source(n)->peaks_ready (sigc::bind (sigc::mem_fun(*this, &AudioRegionView::peaks_ready_handler), n), data_ready_connection)) {
+ if (audio_region()->audio_source(n)->peaks_ready (boost::bind (&AudioRegionView::peaks_ready_handler, this, n), data_ready_connection)) {
// cerr << "\tData is ready\n";
create_one_wave (n, true);
} else {
@@ -1018,21 +1017,21 @@ AudioRegionView::add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *ev)
gain_line->view_to_model_coord (x, y);
- trackview.session().begin_reversible_command (_("add gain control point"));
+ trackview.session()->begin_reversible_command (_("add gain control point"));
XMLNode &before = audio_region()->envelope()->get_state();
if (!audio_region()->envelope_active()) {
XMLNode &region_before = audio_region()->get_state();
audio_region()->set_envelope_active(true);
XMLNode &region_after = audio_region()->get_state();
- trackview.session().add_command (new MementoCommand<AudioRegion>(*(audio_region().get()), &region_before, &region_after));
+ trackview.session()->add_command (new MementoCommand<AudioRegion>(*(audio_region().get()), &region_before, &region_after));
}
audio_region()->envelope()->add (fx, y);
XMLNode &after = audio_region()->envelope()->get_state();
- trackview.session().add_command (new MementoCommand<AutomationList>(*audio_region()->envelope().get(), &before, &after));
- trackview.session().commit_reversible_command ();
+ trackview.session()->add_command (new MementoCommand<AutomationList>(*audio_region()->envelope().get(), &before, &after));
+ trackview.session()->commit_reversible_command ();
}
void
@@ -1187,7 +1186,7 @@ AudioRegionView::add_ghost (TimeAxisView& tv)
ghost->set_colors();
ghosts.push_back (ghost);
- ghost->GoingAway.connect (sigc::mem_fun(*this, &AudioRegionView::remove_ghost));
+ ghost->GoingAway.connect (boost::bind (&RegionView::remove_ghost, this, _1));
return ghost;
}
diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc
index 289035d9bf..85ea02a197 100644
--- a/gtk2_ardour/audio_streamview.cc
+++ b/gtk2_ardour/audio_streamview.cc
@@ -188,9 +188,9 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wai
region_views.push_front (region_view);
- /* catch regionview going away */
- cerr << this << " connected to region " << r << endl;
- r->GoingAway.connect (sigc::bind (sigc::mem_fun (*this, &AudioStreamView::remove_region_view), boost::weak_ptr<Region> (r)));
+ /* catch region going away */
+
+ scoped_connect (r->GoingAway, boost::bind (&AudioStreamView::remove_region_view, this, boost::weak_ptr<Region> (r)));
RegionViewAdded (region_view);
@@ -200,9 +200,9 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wai
void
AudioStreamView::remove_region_view (boost::weak_ptr<Region> weak_r)
{
- cerr << this << " RRV entry\n";
+ ENSURE_GUI_THREAD (*this, &AudioStreamView::remove_region_view, weak_r);
- ENSURE_GUI_THREAD (*this, &AudioStreamView::remove_region_view, weak_r)
+ cerr << "a region went way, it appears to be ours (" << this << ")\n";
boost::shared_ptr<Region> r (weak_r.lock());
@@ -210,9 +210,7 @@ AudioStreamView::remove_region_view (boost::weak_ptr<Region> weak_r)
return;
}
- cerr << this << " RRV action for " << r << endl;
-
- if (!_trackview.session().deletion_in_progress()) {
+ if (!_trackview.session()->deletion_in_progress()) {
for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end();) {
CrossfadeViewList::iterator tmp;
@@ -286,9 +284,9 @@ AudioStreamView::playlist_changed (boost::shared_ptr<Diskstream> ds)
StreamView::playlist_changed(ds);
boost::shared_ptr<AudioPlaylist> apl = boost::dynamic_pointer_cast<AudioPlaylist>(ds->playlist());
+
if (apl) {
- playlist_connections.push_back (apl->NewCrossfade.connect (
- sigc::mem_fun (*this, &AudioStreamView::add_crossfade)));
+ playlist_connections.add_connection (apl->NewCrossfade.connect (boost::bind (&AudioStreamView::add_crossfade, this, _1)));
}
}
@@ -349,7 +347,7 @@ AudioStreamView::add_crossfade (boost::shared_ptr<Crossfade> crossfade)
cv->set_valid (true);
crossfade->Invalidated.connect (sigc::mem_fun (*this, &AudioStreamView::remove_crossfade));
crossfade_views[cv->crossfade] = cv;
- if (!_trackview.session().config.get_xfades_visible() || !crossfades_visible) {
+ if (!_trackview.session()->config.get_xfades_visible() || !crossfades_visible) {
cv->hide ();
}
@@ -462,12 +460,12 @@ AudioStreamView::setup_rec_box ()
{
//cerr << _trackview.name() << " streamview SRB region_views.size() = " << region_views.size() << endl;
- if (_trackview.session().transport_rolling()) {
+ if (_trackview.session()->transport_rolling()) {
// cerr << "\trolling\n";
if (!rec_active &&
- _trackview.session().record_status() == Session::Recording &&
+ _trackview.session()->record_status() == Session::Recording &&
_trackview.get_diskstream()->record_enabled()) {
if (_trackview.audio_track()->mode() == Normal && use_rec_regions && rec_regions.size() == rec_rects.size()) {
@@ -475,12 +473,7 @@ AudioStreamView::setup_rec_box ()
SourceList sources;
- for (list<sigc::connection>::iterator prc = rec_data_ready_connections.begin();
- prc != rec_data_ready_connections.end(); ++prc) {
- (*prc).disconnect();
- }
- rec_data_ready_connections.clear();
-
+ rec_data_ready_connections.drop_connections ();
boost::shared_ptr<AudioDiskstream> ads = _trackview.audio_track()->audio_diskstream();
for (uint32_t n=0; n < ads->n_channels().n_audio(); ++n) {
@@ -488,9 +481,9 @@ AudioStreamView::setup_rec_box ()
if (src) {
sources.push_back (src);
- rec_data_ready_connections.push_back (src->PeakRangeReady.connect (sigc::bind
- (sigc::mem_fun (*this, &AudioStreamView::rec_peak_range_ready),
- boost::weak_ptr<Source>(src))));
+ rec_data_ready_connections.add_connection
+ (src->PeakRangeReady.connect
+ (boost::bind (&AudioStreamView::rec_peak_range_ready, this, _1, _2, boost::weak_ptr<Source>(src))));
}
}
@@ -506,7 +499,7 @@ AudioStreamView::setup_rec_box ()
RegionFactory::create (sources, start, 1, "", 0, Region::DefaultFlags, false)));
assert(region);
region->block_property_changes ();
- region->set_position (_trackview.session().transport_frame(), this);
+ region->set_position (_trackview.session()->transport_frame(), this);
rec_regions.push_back (make_pair(region, (RegionView*)0));
}
@@ -550,7 +543,7 @@ AudioStreamView::setup_rec_box ()
RecBoxInfo recbox;
recbox.rectangle = rec_rect;
- recbox.start = _trackview.session().transport_frame();
+ recbox.start = _trackview.session()->transport_frame();
recbox.length = 0;
rec_rects.push_back (recbox);
@@ -562,7 +555,7 @@ AudioStreamView::setup_rec_box ()
rec_active = true;
} else if (rec_active &&
- (_trackview.session().record_status() != Session::Recording ||
+ (_trackview.session()->record_status() != Session::Recording ||
!_trackview.get_diskstream()->record_enabled())) {
screen_update_connection.disconnect();
rec_active = false;
@@ -577,13 +570,7 @@ AudioStreamView::setup_rec_box ()
/* disconnect rapid update */
screen_update_connection.disconnect();
-
- for (list<sigc::connection>::iterator prc = rec_data_ready_connections.begin();
- prc != rec_data_ready_connections.end(); ++prc) {
- (*prc).disconnect();
- }
- rec_data_ready_connections.clear();
-
+ rec_data_ready_connections.drop_connections ();
rec_updating = false;
rec_active = false;
diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc
index f9c10a3894..040e56a323 100644
--- a/gtk2_ardour/audio_time_axis.cc
+++ b/gtk2_ardour/audio_time_axis.cc
@@ -76,7 +76,7 @@ using namespace PBD;
using namespace Gtk;
using namespace Editing;
-AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session& sess, boost::shared_ptr<Route> rt, Canvas& canvas)
+AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session* sess, boost::shared_ptr<Route> rt, Canvas& canvas)
: AxisView(sess)
, RouteTimeAxisView(ed, sess, rt, canvas)
{
diff --git a/gtk2_ardour/audio_time_axis.h b/gtk2_ardour/audio_time_axis.h
index 02c7ed4f19..80450e9f61 100644
--- a/gtk2_ardour/audio_time_axis.h
+++ b/gtk2_ardour/audio_time_axis.h
@@ -66,7 +66,7 @@ class AutomationTimeAxisView;
class AudioTimeAxisView : public RouteTimeAxisView
{
public:
- AudioTimeAxisView (PublicEditor&, ARDOUR::Session&, boost::shared_ptr<ARDOUR::Route>, ArdourCanvas::Canvas& canvas);
+ AudioTimeAxisView (PublicEditor&, ARDOUR::Session*, boost::shared_ptr<ARDOUR::Route>, ArdourCanvas::Canvas& canvas);
virtual ~AudioTimeAxisView ();
AudioStreamView* audio_view();
diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc
index f56ca898ce..7f9bd6b455 100644
--- a/gtk2_ardour/automation_line.cc
+++ b/gtk2_ardour/automation_line.cc
@@ -87,7 +87,7 @@ AutomationLine::AutomationLine (const string& name, TimeAxisView& tv, ArdourCanv
alist->StateChanged.connect (sigc::mem_fun(*this, &AutomationLine::list_changed));
- trackview.session().register_with_memento_command_factory(alist->id(), this);
+ trackview.session()->register_with_memento_command_factory(alist->id(), this);
if (alist->parameter().type() == GainAutomation ||
alist->parameter().type() == EnvelopeAutomation) {
@@ -215,8 +215,8 @@ AutomationLine::modify_point_y (ControlPoint& cp, double y)
double const x = trackview.editor().frame_to_unit (_time_converter.to((*cp.model())->when));
- trackview.editor().current_session()->begin_reversible_command (_("automation event move"));
- trackview.editor().current_session()->add_command (new MementoCommand<AutomationList>(*alist.get(), &get_state(), 0));
+ trackview.editor().session()->begin_reversible_command (_("automation event move"));
+ trackview.editor().session()->add_command (new MementoCommand<AutomationList>(*alist.get(), &get_state(), 0));
cp.move_to (x, y, ControlPoint::Full);
reset_line_coords (cp);
@@ -231,9 +231,9 @@ AutomationLine::modify_point_y (ControlPoint& cp, double y)
update_pending = false;
- trackview.editor().current_session()->add_command (new MementoCommand<AutomationList>(*alist.get(), 0, &alist->get_state()));
- trackview.editor().current_session()->commit_reversible_command ();
- trackview.editor().current_session()->set_dirty ();
+ trackview.editor().session()->add_command (new MementoCommand<AutomationList>(*alist.get(), 0, &alist->get_state()));
+ trackview.editor().session()->commit_reversible_command ();
+ trackview.editor().session()->set_dirty ();
}
@@ -723,7 +723,7 @@ AutomationLine::invalidate_point (ALPoints& p, uint32_t index)
void
AutomationLine::start_drag (ControlPoint* cp, nframes_t x, float fraction)
{
- if (trackview.editor().current_session() == 0) { /* how? */
+ if (trackview.editor().session() == 0) { /* how? */
return;
}
@@ -735,8 +735,8 @@ AutomationLine::start_drag (ControlPoint* cp, nframes_t x, float fraction)
str = _("automation range drag");
}
- trackview.editor().current_session()->begin_reversible_command (str);
- trackview.editor().current_session()->add_command (new MementoCommand<AutomationList>(*alist.get(), &get_state(), 0));
+ trackview.editor().session()->begin_reversible_command (str);
+ trackview.editor().session()->add_command (new MementoCommand<AutomationList>(*alist.get(), &get_state(), 0));
drag_x = x;
drag_distance = 0;
@@ -830,9 +830,9 @@ AutomationLine::end_drag (ControlPoint* cp)
update_pending = false;
- trackview.editor().current_session()->add_command (new MementoCommand<AutomationList>(*alist.get(), 0, &alist->get_state()));
- trackview.editor().current_session()->commit_reversible_command ();
- trackview.editor().current_session()->set_dirty ();
+ trackview.editor().session()->add_command (new MementoCommand<AutomationList>(*alist.get(), 0, &alist->get_state()));
+ trackview.editor().session()->commit_reversible_command ();
+ trackview.editor().session()->set_dirty ();
}
@@ -973,15 +973,15 @@ AutomationLine::remove_point (ControlPoint& cp)
model_representation (cp, mr);
- trackview.editor().current_session()->begin_reversible_command (_("remove control point"));
+ trackview.editor().session()->begin_reversible_command (_("remove control point"));
XMLNode &before = alist->get_state();
alist->erase (mr.start, mr.end);
- trackview.editor().current_session()->add_command(new MementoCommand<AutomationList>(
+ trackview.editor().session()->add_command(new MementoCommand<AutomationList>(
*alist.get(), &before, &alist->get_state()));
- trackview.editor().current_session()->commit_reversible_command ();
- trackview.editor().current_session()->set_dirty ();
+ trackview.editor().session()->commit_reversible_command ();
+ trackview.editor().session()->set_dirty ();
}
void
@@ -1020,7 +1020,7 @@ AutomationLine::get_selectables (nframes_t& start, nframes_t& end,
if (collecting) {
- results.push_back (new AutomationSelectable (nstart, nend, botfrac, topfrac, trackview));
+ results.push_back (new AutomationSelectable (nstart, nend, botfrac, topfrac, &trackview));
collecting = false;
nstart = max_frames;
nend = 0;
@@ -1030,7 +1030,7 @@ AutomationLine::get_selectables (nframes_t& start, nframes_t& end,
}
if (collecting) {
- results.push_back (new AutomationSelectable (nstart, nend, botfrac, topfrac, trackview));
+ results.push_back (new AutomationSelectable (nstart, nend, botfrac, topfrac, &trackview));
}
}
@@ -1057,7 +1057,7 @@ AutomationLine::set_selected_points (PointSelection& points)
for (PointSelection::iterator r = points.begin(); r != points.end(); ++r) {
- if (&(*r).track != &trackview) {
+ if ((*r).track != &trackview) {
continue;
}
@@ -1190,10 +1190,10 @@ AutomationLine::clear ()
/* parent must create command */
XMLNode &before = get_state();
alist->clear();
- trackview.editor().current_session()->add_command (
+ trackview.editor().session()->add_command (
new MementoCommand<AutomationLine>(*this, &before, &get_state()));
- trackview.editor().current_session()->commit_reversible_command ();
- trackview.editor().current_session()->set_dirty ();
+ trackview.editor().session()->commit_reversible_command ();
+ trackview.editor().session()->set_dirty ();
}
void
diff --git a/gtk2_ardour/automation_line.h b/gtk2_ardour/automation_line.h
index c8c265c307..c16bf60008 100644
--- a/gtk2_ardour/automation_line.h
+++ b/gtk2_ardour/automation_line.h
@@ -52,7 +52,7 @@ namespace Gnome {
}
}
-class AutomationLine : public sigc::trackable, public PBD::StatefulThingWithGoingAway
+class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible
{
public:
AutomationLine (const std::string& name, TimeAxisView&, ArdourCanvas::Group&,
diff --git a/gtk2_ardour/automation_region_view.cc b/gtk2_ardour/automation_region_view.cc
index a891feb2e1..9056adc693 100644
--- a/gtk2_ardour/automation_region_view.cc
+++ b/gtk2_ardour/automation_region_view.cc
@@ -117,16 +117,16 @@ AutomationRegionView::add_automation_event (GdkEvent* /*event*/, nframes_t when,
_line->view_to_model_coord (x, y);
- view->session().begin_reversible_command (_("add automation event"));
+ view->session()->begin_reversible_command (_("add automation event"));
XMLNode& before = _line->the_list()->get_state();
_line->the_list()->add (x, y);
XMLNode& after = _line->the_list()->get_state();
- view->session().commit_reversible_command (new MementoCommand<ARDOUR::AutomationList>(
+ view->session()->commit_reversible_command (new MementoCommand<ARDOUR::AutomationList>(
*_line->the_list(), &before, &after));
- view->session().set_dirty ();
+ view->session()->set_dirty ();
}
void
diff --git a/gtk2_ardour/automation_selectable.h b/gtk2_ardour/automation_selectable.h
index 851da8bf79..92e73a3c33 100644
--- a/gtk2_ardour/automation_selectable.h
+++ b/gtk2_ardour/automation_selectable.h
@@ -31,17 +31,17 @@ struct AutomationSelectable : public Selectable
nframes_t end;
double low_fract;
double high_fract;
- TimeAxisView& track;
+ TimeAxisView* track; // ref would be better, but ARDOUR::SessionHandlePtr is non-assignable
- AutomationSelectable (nframes_t s, nframes_t e, double l, double h, TimeAxisView& atv)
+ AutomationSelectable (nframes_t s, nframes_t e, double l, double h, TimeAxisView* atv)
: start (s), end (e), low_fract (l), high_fract (h), track (atv) {}
bool operator== (const AutomationSelectable& other) {
return start == other.start &&
- end == other.end &&
- low_fract == other.low_fract &&
- high_fract == other.high_fract &&
- &track == &other.track;
+ end == other.end &&
+ low_fract == other.low_fract &&
+ high_fract == other.high_fract &&
+ track == other.track;
}
};
diff --git a/gtk2_ardour/automation_streamview.cc b/gtk2_ardour/automation_streamview.cc
index a22b2644d0..9c7cf50ac7 100644
--- a/gtk2_ardour/automation_streamview.cc
+++ b/gtk2_ardour/automation_streamview.cc
@@ -129,7 +129,7 @@ AutomationStreamView::add_region_view_internal (boost::shared_ptr<Region> region
display_region(region_view);
/* catch regionview going away */
- region->GoingAway.connect (sigc::bind (sigc::mem_fun (*this, &AutomationStreamView::remove_region_view), region));
+ scoped_connect (region->GoingAway, boost::bind (&AutomationStreamView::remove_region_view, this, boost::weak_ptr<Region>(region)));
RegionViewAdded (region_view);
diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc
index 3184033dca..aee9b70726 100644
--- a/gtk2_ardour/automation_time_axis.cc
+++ b/gtk2_ardour/automation_time_axis.cc
@@ -58,7 +58,7 @@ const string AutomationTimeAxisView::state_node_name = "AutomationChild";
* For route child (e.g. plugin) automation, pass the child for \a.
* For region automation (e.g. MIDI CC), pass null for \a.
*/
-AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Route> r,
+AutomationTimeAxisView::AutomationTimeAxisView (Session* s, boost::shared_ptr<Route> r,
boost::shared_ptr<Automatable> a, boost::shared_ptr<AutomationControl> c,
PublicEditor& e, TimeAxisView& parent, bool show_regions,
ArdourCanvas::Canvas& canvas, const string & nom, const string & nomparent)
@@ -370,11 +370,11 @@ AutomationTimeAxisView::set_interpolation (AutomationList::InterpolationStyle st
void
AutomationTimeAxisView::clear_clicked ()
{
- _session.begin_reversible_command (_("clear automation"));
+ _session->begin_reversible_command (_("clear automation"));
if (_line) {
_line->clear ();
}
- _session.commit_reversible_command ();
+ _session->commit_reversible_command ();
}
void
@@ -587,15 +587,15 @@ AutomationTimeAxisView::add_automation_event (ArdourCanvas::Item* /*item*/, GdkE
_line->view_to_model_coord (x, y);
- _session.begin_reversible_command (_("add automation event"));
+ _session->begin_reversible_command (_("add automation event"));
XMLNode& before = _control->alist()->get_state();
_control->alist()->add (when, y);
XMLNode& after = _control->alist()->get_state();
- _session.commit_reversible_command (new MementoCommand<ARDOUR::AutomationList>(*_control->alist(), &before, &after));
+ _session->commit_reversible_command (new MementoCommand<ARDOUR::AutomationList>(*_control->alist(), &before, &after));
- _session.set_dirty ();
+ _session->set_dirty ();
}
bool
@@ -617,7 +617,7 @@ AutomationTimeAxisView::cut_copy_clear_one (AutomationLine& line, Selection& sel
case Cut:
if ((what_we_got = alist->cut (selection.time.front().start, selection.time.front().end)) != 0) {
_editor.get_cut_buffer().add (what_we_got);
- _session.add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &alist->get_state()));
+ _session->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &alist->get_state()));
ret = true;
}
break;
@@ -629,7 +629,7 @@ AutomationTimeAxisView::cut_copy_clear_one (AutomationLine& line, Selection& sel
case Clear:
if ((what_we_got = alist->cut (selection.time.front().start, selection.time.front().end)) != 0) {
- _session.add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &alist->get_state()));
+ _session->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &alist->get_state()));
ret = true;
}
break;
@@ -659,11 +659,11 @@ AutomationTimeAxisView::reset_objects_one (AutomationLine& line, PointSelection&
{
boost::shared_ptr<AutomationList> alist(line.the_list());
- _session.add_command (new MementoCommand<AutomationList>(*alist.get(), &alist->get_state(), 0));
+ _session->add_command (new MementoCommand<AutomationList>(*alist.get(), &alist->get_state(), 0));
for (PointSelection::iterator i = selection.begin(); i != selection.end(); ++i) {
- if (&(*i).track != this) {
+ if ((*i).track != this) {
continue;
}
@@ -688,7 +688,7 @@ AutomationTimeAxisView::cut_copy_clear_objects_one (AutomationLine& line, PointS
for (PointSelection::iterator i = selection.begin(); i != selection.end(); ++i) {
- if (&(*i).track != this) {
+ if ((*i).track != this) {
continue;
}
@@ -696,7 +696,7 @@ AutomationTimeAxisView::cut_copy_clear_objects_one (AutomationLine& line, PointS
case Cut:
if ((what_we_got = alist->cut ((*i).start, (*i).end)) != 0) {
_editor.get_cut_buffer().add (what_we_got);
- _session.add_command (new MementoCommand<AutomationList>(*alist.get(), new XMLNode (before), &alist->get_state()));
+ _session->add_command (new MementoCommand<AutomationList>(*alist.get(), new XMLNode (before), &alist->get_state()));
ret = true;
}
break;
@@ -708,7 +708,7 @@ AutomationTimeAxisView::cut_copy_clear_objects_one (AutomationLine& line, PointS
case Clear:
if ((what_we_got = alist->cut ((*i).start, (*i).end)) != 0) {
- _session.add_command (new MementoCommand<AutomationList>(*alist.get(), new XMLNode (before), &alist->get_state()));
+ _session->add_command (new MementoCommand<AutomationList>(*alist.get(), new XMLNode (before), &alist->get_state()));
ret = true;
}
break;
@@ -765,7 +765,7 @@ AutomationTimeAxisView::paste_one (AutomationLine& line, nframes_t pos, float ti
XMLNode &before = alist->get_state();
alist->paste (copy, pos, times);
- _session.add_command (new MementoCommand<AutomationList>(*alist.get(), &before, &alist->get_state()));
+ _session->add_command (new MementoCommand<AutomationList>(*alist.get(), &before, &alist->get_state()));
return true;
}
@@ -834,7 +834,7 @@ AutomationTimeAxisView::add_line (boost::shared_ptr<AutomationLine> line)
assert(line->the_list() == _control->list());
automation_connection = _control->alist()->automation_state_changed.connect
- (sigc::mem_fun(*this, &AutomationTimeAxisView::automation_state_changed));
+ (boost::bind (&AutomationTimeAxisView::automation_state_changed, this));
_line = line;
//_controller = AutomationController::create(_session, line->the_list(), _control);
diff --git a/gtk2_ardour/automation_time_axis.h b/gtk2_ardour/automation_time_axis.h
index f4d71f93c2..f00d0a24fe 100644
--- a/gtk2_ardour/automation_time_axis.h
+++ b/gtk2_ardour/automation_time_axis.h
@@ -54,7 +54,7 @@ class AutomationController;
class AutomationTimeAxisView : public TimeAxisView {
public:
- AutomationTimeAxisView (ARDOUR::Session&,
+ AutomationTimeAxisView (ARDOUR::Session*,
boost::shared_ptr<ARDOUR::Route>,
boost::shared_ptr<ARDOUR::Automatable>,
boost::shared_ptr<ARDOUR::AutomationControl>,
@@ -151,7 +151,7 @@ class AutomationTimeAxisView : public TimeAxisView {
void set_interpolation (ARDOUR::AutomationList::InterpolationStyle);
void interpolation_changed ();
- sigc::connection automation_connection;
+ boost::signals2::scoped_connection automation_connection;
void update_extra_xml_shown (bool editor_shown);
diff --git a/gtk2_ardour/axis_view.cc b/gtk2_ardour/axis_view.cc
index bed5e098b0..d645a51873 100644
--- a/gtk2_ardour/axis_view.cc
+++ b/gtk2_ardour/axis_view.cc
@@ -41,10 +41,12 @@
using namespace std;
using namespace Gtk;
using namespace Gtkmm2ext;
+using namespace ARDOUR;
list<Gdk::Color> AxisView::used_colors;
-AxisView::AxisView (ARDOUR::Session& sess) : _session(sess)
+AxisView::AxisView (ARDOUR::Session* sess)
+ : SessionHandlePtr (sess)
{
_selected = false;
_marked_for_display = false;
diff --git a/gtk2_ardour/axis_view.h b/gtk2_ardour/axis_view.h
index 21220d5439..3d2591a977 100644
--- a/gtk2_ardour/axis_view.h
+++ b/gtk2_ardour/axis_view.h
@@ -26,6 +26,10 @@
#include <gdkmm/color.h>
#include "pbd/xml++.h"
+#include "pbd/destructible.h"
+
+#include "ardour/session_handle.h"
+
#include "prompter.h"
#include "selectable.h"
@@ -37,7 +41,7 @@ namespace ARDOUR {
* AxisView defines the abstract base class for time-axis trackviews and routes.
*
*/
-class AxisView : public virtual Selectable
+class AxisView : public virtual Selectable, public PBD::Destructible, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr
{
public:
/**
@@ -47,7 +51,7 @@ class AxisView : public virtual Selectable
*/
Gdk::Color color() const { return _color; }
- ARDOUR::Session& session() const { return _session; }
+ ARDOUR::Session* session() const { return _session; }
virtual std::string name() const = 0;
@@ -57,17 +61,15 @@ class AxisView : public virtual Selectable
}
sigc::signal<void> Hiding;
- sigc::signal<void> GoingAway;
void set_old_order_key (uint32_t ok) { _old_order_key = ok; }
uint32_t old_order_key() const { return _old_order_key; }
protected:
- AxisView (ARDOUR::Session& sess);
+ AxisView (ARDOUR::Session* sess);
virtual ~AxisView();
-
/**
* Generate a new random TrackView color, unique from those colors already used.
*
@@ -76,7 +78,6 @@ class AxisView : public virtual Selectable
static Gdk::Color unique_random_color();
- ARDOUR::Session& _session;
Gdk::Color _color;
static std::list<Gdk::Color> used_colors;
diff --git a/gtk2_ardour/bundle_manager.cc b/gtk2_ardour/bundle_manager.cc
index b638544836..ca047ebea0 100644
--- a/gtk2_ardour/bundle_manager.cc
+++ b/gtk2_ardour/bundle_manager.cc
@@ -34,11 +34,9 @@
using namespace std;
using namespace ARDOUR;
-BundleEditorMatrix::BundleEditorMatrix (
- Gtk::Window* parent, Session* session, boost::shared_ptr<Bundle> bundle
- )
- : PortMatrix (parent, session, bundle->type()),
- _bundle (bundle)
+BundleEditorMatrix::BundleEditorMatrix (Gtk::Window* parent, Session* session, boost::shared_ptr<Bundle> bundle)
+ : PortMatrix (parent, session, bundle->type())
+ , _bundle (bundle)
{
_port_group = boost::shared_ptr<PortGroup> (new PortGroup (""));
_port_group->add_bundle (_bundle);
@@ -285,8 +283,12 @@ BundleEditor::on_map ()
BundleManager::BundleManager (Session* session)
- : ArdourDialog (_("Bundle Manager")), _session (session), edit_button (_("Edit")), delete_button (_("Delete"))
+ : ArdourDialog (_("Bundle Manager"))
+ , edit_button (_("Edit"))
+ , delete_button (_("Delete"))
{
+ set_session (session);
+
_list_model = Gtk::ListStore::create (_list_model_columns);
_tree_view.set_model (_list_model);
_tree_view.append_column (_("Name"), _list_model_columns.name);
diff --git a/gtk2_ardour/bundle_manager.h b/gtk2_ardour/bundle_manager.h
index 3beb77e952..d064e40bf6 100644
--- a/gtk2_ardour/bundle_manager.h
+++ b/gtk2_ardour/bundle_manager.h
@@ -115,7 +115,6 @@ class BundleManager : public ArdourDialog
Gtk::TreeView _tree_view;
Glib::RefPtr<Gtk::ListStore> _list_model;
ModelColumns _list_model_columns;
- ARDOUR::Session* _session;
Gtk::Button edit_button;
Gtk::Button delete_button;
};
diff --git a/gtk2_ardour/crossfade_edit.cc b/gtk2_ardour/crossfade_edit.cc
index 4c9b8b7537..7a7b740a25 100644
--- a/gtk2_ardour/crossfade_edit.cc
+++ b/gtk2_ardour/crossfade_edit.cc
@@ -72,10 +72,9 @@ CrossfadeEditor::Half::Half ()
{
}
-CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr<Crossfade> xf, double my, double mxy)
+CrossfadeEditor::CrossfadeEditor (Session* s, boost::shared_ptr<Crossfade> xf, double my, double mxy)
: ArdourDialog (_("ardour: x-fade edit")),
xfade (xf),
- session (s),
clear_button (_("Clear")),
revert_button (_("Reset")),
audition_both_button (_("Fade")),
@@ -96,6 +95,8 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr<Crossfade> xf, d
select_in_button (_("Fade In")),
select_out_button (_("Fade Out"))
{
+ set_session (s);
+
set_wmclass (X_("ardour_automationedit"), "Ardour");
set_name ("CrossfadeEditWindow");
set_position (Gtk::WIN_POS_MOUSE);
@@ -292,7 +293,7 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr<Crossfade> xf, d
xfade->StateChanged.connect (sigc::mem_fun(*this, &CrossfadeEditor::xfade_changed));
- session.AuditionActive.connect (sigc::mem_fun(*this, &CrossfadeEditor::audition_state_changed));
+ _session_connections.add_connection (_session->AuditionActive.connect (sigc::mem_fun(*this, &CrossfadeEditor::audition_state_changed)));
show_all_children();
}
@@ -1129,7 +1130,7 @@ CrossfadeEditor::make_waves (boost::shared_ptr<AudioRegion> region, WhichFade wh
gdouble yoff = n * ht;
- if (region->audio_source(n)->peaks_ready (sigc::bind (sigc::mem_fun(*this, &CrossfadeEditor::peaks_ready), region, which), peaks_ready_connection)) {
+ if (region->audio_source(n)->peaks_ready (boost::bind (&CrossfadeEditor::peaks_ready, this, boost::weak_ptr<AudioRegion>(region), which), peaks_ready_connection)) {
WaveView* waveview = new WaveView (*(canvas->root()));
waveview->property_data_src() = region.get();
@@ -1163,8 +1164,14 @@ CrossfadeEditor::make_waves (boost::shared_ptr<AudioRegion> region, WhichFade wh
}
void
-CrossfadeEditor::peaks_ready (boost::shared_ptr<AudioRegion> r, WhichFade which)
+CrossfadeEditor::peaks_ready (boost::weak_ptr<AudioRegion> wr, WhichFade which)
{
+ boost::shared_ptr<AudioRegion> r (wr.lock());
+
+ if (!r) {
+ return;
+ }
+
/* this should never be called, because the peak files for an xfade
will be ready by the time we want them. but our API forces us
to provide this, so ..
@@ -1176,7 +1183,7 @@ CrossfadeEditor::peaks_ready (boost::shared_ptr<AudioRegion> r, WhichFade which)
void
CrossfadeEditor::audition (Audition which)
{
- AudioPlaylist& pl (session.the_auditioner()->prepare_playlist());
+ AudioPlaylist& pl (_session->the_auditioner()->prepare_playlist());
nframes_t preroll;
nframes_t postroll;
nframes_t left_start_offset;
@@ -1184,13 +1191,13 @@ CrossfadeEditor::audition (Audition which)
nframes_t left_length;
if (which != Right && preroll_button.get_active()) {
- preroll = session.frame_rate() * 2; //2 second hardcoded preroll for now
+ preroll = _session->frame_rate() * 2; //2 second hardcoded preroll for now
} else {
preroll = 0;
}
if (which != Left && postroll_button.get_active()) {
- postroll = session.frame_rate() * 2; //2 second hardcoded postroll for now
+ postroll = _session->frame_rate() * 2; //2 second hardcoded postroll for now
} else {
postroll = 0;
}
@@ -1220,9 +1227,9 @@ CrossfadeEditor::audition (Audition which)
//apply a 20ms declicking fade at the start and end of auditioning
left->set_fade_in_active(true);
- left->set_fade_in_length(session.frame_rate() / 50);
+ left->set_fade_in_length(_session->frame_rate() / 50);
right->set_fade_out_active(true);
- right->set_fade_out_length(session.frame_rate() / 50);
+ right->set_fade_out_length(_session->frame_rate() / 50);
pl.add_region (left, 0);
pl.add_region (right, 1 + preroll);
@@ -1236,7 +1243,7 @@ CrossfadeEditor::audition (Audition which)
/* there is only one ... */
pl.foreach_crossfade (sigc::mem_fun (*this, &CrossfadeEditor::setup));
- session.audition_playlist ();
+ _session->audition_playlist ();
}
void
@@ -1251,7 +1258,7 @@ CrossfadeEditor::audition_left_dry ()
boost::shared_ptr<AudioRegion> left (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade->out(), xfade->out()->length() - xfade->length(), xfade->length(), "xfade left",
0, Region::DefaultFlags, false)));
- session.audition_region (left);
+ _session->audition_region (left);
}
void
@@ -1265,7 +1272,7 @@ CrossfadeEditor::audition_right_dry ()
{
boost::shared_ptr<AudioRegion> right (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade->in(), 0, xfade->length(), "xfade in",
0, Region::DefaultFlags, false)));
- session.audition_region (right);
+ _session->audition_region (right);
}
void
@@ -1277,7 +1284,7 @@ CrossfadeEditor::audition_right ()
void
CrossfadeEditor::cancel_audition ()
{
- session.cancel_audition ();
+ _session->cancel_audition ();
}
void
@@ -1285,7 +1292,7 @@ CrossfadeEditor::audition_toggled ()
{
bool x;
- if ((x = audition_both_button.get_active ()) != session.is_auditioning()) {
+ if ((x = audition_both_button.get_active ()) != _session->is_auditioning()) {
if (x) {
audition_both ();
@@ -1300,7 +1307,7 @@ CrossfadeEditor::audition_right_toggled ()
{
bool x;
- if ((x = audition_right_button.get_active ()) != session.is_auditioning()) {
+ if ((x = audition_right_button.get_active ()) != _session->is_auditioning()) {
if (x) {
audition_right ();
@@ -1315,7 +1322,7 @@ CrossfadeEditor::audition_right_dry_toggled ()
{
bool x;
- if ((x = audition_right_dry_button.get_active ()) != session.is_auditioning()) {
+ if ((x = audition_right_dry_button.get_active ()) != _session->is_auditioning()) {
if (x) {
audition_right_dry ();
@@ -1330,7 +1337,7 @@ CrossfadeEditor::audition_left_toggled ()
{
bool x;
- if ((x = audition_left_button.get_active ()) != session.is_auditioning()) {
+ if ((x = audition_left_button.get_active ()) != _session->is_auditioning()) {
if (x) {
audition_left ();
@@ -1345,7 +1352,7 @@ CrossfadeEditor::audition_left_dry_toggled ()
{
bool x;
- if ((x = audition_left_dry_button.get_active ()) != session.is_auditioning()) {
+ if ((x = audition_left_dry_button.get_active ()) != _session->is_auditioning()) {
if (x) {
audition_left_dry ();
@@ -1382,7 +1389,7 @@ CrossfadeEditor::on_key_release_event (GdkEventKey* ev)
break;
case GDK_space:
- if (session.is_auditioning()) {
+ if (_session->is_auditioning()) {
cancel_audition ();
} else {
audition_both_button.set_active (!audition_both_button.get_active());
diff --git a/gtk2_ardour/crossfade_edit.h b/gtk2_ardour/crossfade_edit.h
index f2ec1a125b..7334002abd 100644
--- a/gtk2_ardour/crossfade_edit.h
+++ b/gtk2_ardour/crossfade_edit.h
@@ -27,6 +27,8 @@
#include <gtkmm/radiobutton.h>
#include "evoral/Curve.hpp"
+#include "ardour/session_handle.h"
+
#include "ardour_dialog.h"
#include "canvas.h"
@@ -40,7 +42,7 @@ namespace ARDOUR
class CrossfadeEditor : public ArdourDialog
{
public:
- CrossfadeEditor (ARDOUR::Session&, boost::shared_ptr<ARDOUR::Crossfade>, double miny, double maxy);
+ CrossfadeEditor (ARDOUR::Session*, boost::shared_ptr<ARDOUR::Crossfade>, double miny, double maxy);
~CrossfadeEditor ();
void apply ();
@@ -79,7 +81,6 @@ class CrossfadeEditor : public ArdourDialog
private:
boost::shared_ptr<ARDOUR::Crossfade> xfade;
- ARDOUR::Session& session;
Gtk::VBox vpacker;
@@ -182,10 +183,10 @@ class CrossfadeEditor : public ArdourDialog
void set (const ARDOUR::AutomationList& alist, WhichFade);
- sigc::connection peaks_ready_connection;
+ boost::signals2::scoped_connection peaks_ready_connection;
void make_waves (boost::shared_ptr<ARDOUR::AudioRegion>, WhichFade);
- void peaks_ready (boost::shared_ptr<ARDOUR::AudioRegion> r, WhichFade);
+ void peaks_ready (boost::weak_ptr<ARDOUR::AudioRegion> r, WhichFade);
void _apply_to (boost::shared_ptr<ARDOUR::Crossfade> xf);
void setup (boost::shared_ptr<ARDOUR::Crossfade>);
diff --git a/gtk2_ardour/crossfade_view.cc b/gtk2_ardour/crossfade_view.cc
index 2df4cd0982..63868ca895 100644
--- a/gtk2_ardour/crossfade_view.cc
+++ b/gtk2_ardour/crossfade_view.cc
@@ -39,7 +39,7 @@ using namespace Editing;
using namespace Gnome;
using namespace Canvas;
-sigc::signal<void,CrossfadeView*> CrossfadeView::GoingAway;
+boost::signals2::signal<void(CrossfadeView*)> CrossfadeView::GoingAway;
CrossfadeView::CrossfadeView (ArdourCanvas::Group *parent,
RouteTimeAxisView &tv,
diff --git a/gtk2_ardour/crossfade_view.h b/gtk2_ardour/crossfade_view.h
index 3e4021742e..a82387393f 100644
--- a/gtk2_ardour/crossfade_view.h
+++ b/gtk2_ardour/crossfade_view.h
@@ -22,7 +22,7 @@
#include <vector>
#include <libgnomecanvasmm.h>
-#include <sigc++/signal.h>
+#include <boost/signals2.hpp>
#include "ardour/crossfade.h"
#include "time_axis_view_item.h"
@@ -52,7 +52,7 @@ struct CrossfadeView : public TimeAxisViewItem
bool visible() const { return _visible; }
void set_valid (bool yn);
- static sigc::signal<void,CrossfadeView*> GoingAway;
+ static boost::signals2::signal<void(CrossfadeView*)> GoingAway;
AudioRegionView& upper_regionview () const;
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index dd9cdf9582..bf0b2124bb 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -268,7 +268,6 @@ Editor::Editor ()
PublicEditor::_instance = this;
- session = 0;
_have_idled = false;
selection = new Selection (this);
@@ -628,7 +627,7 @@ Editor::Editor ()
_playlist_selector = new PlaylistSelector();
_playlist_selector->signal_delete_event().connect (sigc::bind (sigc::ptr_fun (just_hide_it), static_cast<Window *> (_playlist_selector)));
- RegionView::RegionViewGoingAway.connect (sigc::mem_fun(*this, &Editor::catch_vanishing_regionview));
+ scoped_connect (RegionView::RegionViewGoingAway, boost::bind (&Editor::catch_vanishing_regionview, this, _1));
/* nudge stuff */
@@ -805,8 +804,8 @@ Editor::instant_save ()
return;
}
- if (session) {
- session->add_instant_xml(get_state());
+ if (_session) {
+ _session->add_instant_xml(get_state());
} else {
Config->add_instant_xml(get_state());
}
@@ -815,7 +814,7 @@ Editor::instant_save ()
void
Editor::zoom_adjustment_changed ()
{
- if (session == 0) {
+ if (_session == 0) {
return;
}
@@ -824,8 +823,8 @@ Editor::zoom_adjustment_changed ()
if (fpu < 1.0) {
fpu = 1.0;
zoom_range_clock.set ((nframes64_t) floor (fpu * _canvas_width));
- } else if (fpu > session->current_end_frame() / _canvas_width) {
- fpu = session->current_end_frame() / _canvas_width;
+ } else if (fpu > _session->current_end_frame() / _canvas_width) {
+ fpu = _session->current_end_frame() / _canvas_width;
zoom_range_clock.set ((nframes64_t) floor (fpu * _canvas_width));
}
@@ -837,7 +836,7 @@ Editor::control_scroll (float fraction)
{
ENSURE_GUI_THREAD (*this, &Editor::control_scroll, fraction)
- if (!session) {
+ if (!_session) {
return;
}
@@ -855,7 +854,7 @@ Editor::control_scroll (float fraction)
*/
if (!_control_scroll_target) {
- _control_scroll_target = session->transport_frame();
+ _control_scroll_target = _session->transport_frame();
_dragging_playhead = true;
}
@@ -897,7 +896,7 @@ Editor::control_scroll (float fraction)
bool
Editor::deferred_control_scroll (nframes64_t /*target*/)
{
- session->request_locate (*_control_scroll_target, session->transport_rolling());
+ _session->request_locate (*_control_scroll_target, _session->transport_rolling());
// reset for next stream
_control_scroll_target = boost::none;
_dragging_playhead = false;
@@ -907,7 +906,7 @@ Editor::deferred_control_scroll (nframes64_t /*target*/)
void
Editor::access_action (std::string action_group, std::string action_item)
{
- if (!session) {
+ if (!_session) {
return;
}
@@ -949,7 +948,7 @@ Editor::map_position_change (nframes64_t frame)
{
ENSURE_GUI_THREAD (*this, &Editor::map_position_change, frame)
- if (session == 0 || !_follow_playhead) {
+ if (_session == 0 || !_follow_playhead) {
return;
}
@@ -987,12 +986,12 @@ Editor::center_screen_internal (nframes64_t frame, float page)
void
Editor::handle_new_duration ()
{
- if (!session) {
+ if (!_session) {
return;
}
ENSURE_GUI_THREAD (*this, &Editor::handle_new_duration)
- nframes64_t new_end = session->current_end_frame() + (nframes64_t) floorf (current_page_frames() * 0.10f);
+ nframes64_t new_end = _session->current_end_frame() + (nframes64_t) floorf (current_page_frames() * 0.10f);
horizontal_adjustment.set_upper (new_end / frames_per_unit);
horizontal_adjustment.set_page_size (current_page_frames()/frames_per_unit);
@@ -1004,27 +1003,19 @@ Editor::handle_new_duration ()
}
void
-Editor::update_title_s (const string & snap_name)
-{
- ENSURE_GUI_THREAD (*this, &Editor::update_title_s, snap_name)
-
- update_title ();
-}
-
-void
Editor::update_title ()
{
ENSURE_GUI_THREAD (*this, &Editor::update_title)
- if (session) {
- bool dirty = session->dirty();
+ if (_session) {
+ bool dirty = _session->dirty();
string session_name;
- if (session->snap_name() != session->name()) {
- session_name = session->snap_name();
+ if (_session->snap_name() != _session->name()) {
+ session_name = _session->snap_name();
} else {
- session_name = session->name();
+ session_name = _session->name();
}
if (dirty) {
@@ -1038,9 +1029,36 @@ Editor::update_title ()
}
void
-Editor::connect_to_session (Session *t)
+Editor::set_session (Session *t)
{
- session = t;
+ SessionHandlePtr::set_session (t);
+
+ zoom_range_clock.set_session (_session);
+ _playlist_selector->set_session (_session);
+ nudge_clock.set_session (_session);
+ _summary->set_session (_session);
+ _group_tabs->set_session (_session);
+ _route_groups->set_session (_session);
+ _regions->set_session (_session);
+ _snapshots->set_session (_session);
+ _routes->set_session (_session);
+ _locations->set_session (_session);
+
+ if (rhythm_ferret) {
+ rhythm_ferret->set_session (_session);
+ }
+
+ if (analysis_window) {
+ analysis_window->set_session (_session);
+ }
+
+ if (sfbrowser) {
+ sfbrowser->set_session (_session);
+ }
+
+ if (!_session) {
+ return;
+ }
compute_fixed_ruler_scale ();
@@ -1053,79 +1071,65 @@ Editor::connect_to_session (Session *t)
/* catch up with the playhead */
- session->request_locate (playhead_cursor->current_frame);
+ _session->request_locate (playhead_cursor->current_frame);
update_title ();
- session->GoingAway.connect (sigc::mem_fun(*this, &Editor::session_going_away));
- session->history().Changed.connect (sigc::mem_fun (*this, &Editor::history_changed));
+ _session_connections.add_connection (_session->history().Changed.connect (boost::bind (&Editor::history_changed, this)));
/* These signals can all be emitted by a non-GUI thread. Therefore the
handlers for them must not attempt to directly interact with the GUI,
but use Gtkmm2ext::UI::instance()->call_slot();
*/
- session_connections.push_back (session->TransportStateChange.connect (sigc::mem_fun(*this, &Editor::map_transport_state)));
- session_connections.push_back (session->PositionChanged.connect (sigc::mem_fun(*this, &Editor::map_position_change)));
- session_connections.push_back (session->RouteAdded.connect (sigc::mem_fun(*this, &Editor::handle_new_route)));
- session_connections.push_back (session->DurationChanged.connect (sigc::mem_fun(*this, &Editor::handle_new_duration)));
- session_connections.push_back (session->DirtyChanged.connect (sigc::mem_fun(*this, &Editor::update_title)));
- session_connections.push_back (session->StateSaved.connect (sigc::mem_fun(*this, &Editor::update_title_s)));
- session_connections.push_back (session->AskAboutPlaylistDeletion.connect (sigc::mem_fun(*this, &Editor::playlist_deletion_dialog)));
-
- session_connections.push_back (session->TimecodeOffsetChanged.connect (sigc::mem_fun(*this, &Editor::update_just_timecode)));
+ _session_connections.add_connection (_session->TransportStateChange.connect (boost::bind (&Editor::map_transport_state, this)));
+ _session_connections.add_connection (_session->PositionChanged.connect (boost::bind (&Editor::map_position_change, this, _1)));
+ _session_connections.add_connection (_session->RouteAdded.connect (boost::bind (&Editor::handle_new_route, this, _1)));
+ _session_connections.add_connection (_session->DurationChanged.connect (boost::bind (&Editor::handle_new_duration, this)));
+ _session_connections.add_connection (_session->DirtyChanged.connect (boost::bind (&Editor::update_title, this)));
+ _session_connections.add_connection (_session->StateSaved.connect (boost::bind (&Editor::update_title, this)));
+ _session_connections.add_connection (_session->AskAboutPlaylistDeletion.connect (boost::bind (&Editor::playlist_deletion_dialog, this, _1)));
+ _session_connections.add_connection (_session->TimecodeOffsetChanged.connect (boost::bind (&Editor::update_just_timecode, this)));
+ _session_connections.add_connection (_session->tempo_map().StateChanged.connect (boost::bind (&Editor::tempo_map_changed, this, _1)));
+ _session_connections.add_connection (_session->Located.connect (boost::bind (&Editor::located, this)));
+ _session_connections.add_connection (_session->config.ParameterChanged.connect (boost::bind (&Editor::parameter_changed, this, _1)));
- session_connections.push_back (session->tempo_map().StateChanged.connect (sigc::mem_fun(*this, &Editor::tempo_map_changed)));
-
- session_connections.push_back (session->Located.connect (sigc::mem_fun (*this, &Editor::located)));
- session_connections.push_back (session->config.ParameterChanged.connect (sigc::mem_fun (*this, &Editor::parameter_changed)));
-
- zoom_range_clock.set_session (session);
- _playlist_selector->set_session (session);
- nudge_clock.set_session (session);
if (Profile->get_sae()) {
BBT_Time bbt;
bbt.bars = 0;
bbt.beats = 0;
bbt.ticks = 120;
- nframes_t pos = session->tempo_map().bbt_duration_at (0, bbt, 1);
+ nframes_t pos = _session->tempo_map().bbt_duration_at (0, bbt, 1);
nudge_clock.set_mode(AudioClock::BBT);
nudge_clock.set (pos, true, 0, AudioClock::BBT);
} else {
- nudge_clock.set (session->frame_rate() * 5, true, 0, AudioClock::Timecode); // default of 5 seconds
+ nudge_clock.set (_session->frame_rate() * 5, true, 0, AudioClock::Timecode); // default of 5 seconds
}
playhead_cursor->canvas_item.show ();
- if (rhythm_ferret) {
- rhythm_ferret->set_session (session);
- }
-
- if (analysis_window != 0)
- analysis_window->set_session (session);
-
- Location* loc = session->locations()->auto_loop_location();
+ Location* loc = _session->locations()->auto_loop_location();
if (loc == 0) {
- loc = new Location (0, session->current_end_frame(), _("Loop"),(Location::Flags) (Location::IsAutoLoop | Location::IsHidden));
+ loc = new Location (0, _session->current_end_frame(), _("Loop"),(Location::Flags) (Location::IsAutoLoop | Location::IsHidden));
if (loc->start() == loc->end()) {
loc->set_end (loc->start() + 1);
}
- session->locations()->add (loc, false);
- session->set_auto_loop_location (loc);
+ _session->locations()->add (loc, false);
+ _session->set_auto_loop_location (loc);
} else {
// force name
loc->set_name (_("Loop"));
}
- loc = session->locations()->auto_punch_location();
+ loc = _session->locations()->auto_punch_location();
if (loc == 0) {
- loc = new Location (0, session->current_end_frame(), _("Punch"), (Location::Flags) (Location::IsAutoPunch | Location::IsHidden));
+ loc = new Location (0, _session->current_end_frame(), _("Punch"), (Location::Flags) (Location::IsAutoPunch | Location::IsHidden));
if (loc->start() == loc->end()) {
loc->set_end (loc->start() + 1);
}
- session->locations()->add (loc, false);
- session->set_auto_punch_location (loc);
+ _session->locations()->add (loc, false);
+ _session->set_auto_punch_location (loc);
} else {
// force name
loc->set_name (_("Punch"));
@@ -1133,26 +1137,26 @@ Editor::connect_to_session (Session *t)
boost::function<void (string)> pc (boost::bind (&Editor::parameter_changed, this, _1));
Config->map_parameters (pc);
- session->config.map_parameters (pc);
+ _session->config.map_parameters (pc);
- session->StateSaved.connect (sigc::mem_fun(*this, &Editor::session_state_saved));
refresh_location_display ();
- session->locations()->added.connect (sigc::mem_fun(*this, &Editor::add_new_location));
- session->locations()->removed.connect (sigc::mem_fun(*this, &Editor::location_gone));
- session->locations()->changed.connect (sigc::mem_fun(*this, &Editor::refresh_location_display));
- session->locations()->StateChanged.connect (sigc::mem_fun(*this, &Editor::refresh_location_display_s));
- session->locations()->end_location()->changed.connect (sigc::mem_fun(*this, &Editor::end_location_changed));
- if (sfbrowser) {
- sfbrowser->set_session (session);
- }
+ /* static signal - no need to drop connection when session is deleted (XXX or we are?)*/
+
+ _session->StateSaved.connect (sigc::mem_fun(*this, &Editor::session_state_saved));
+
+ _session_connections.add_connection (_session->locations()->added.connect (sigc::mem_fun(*this, &Editor::add_new_location)));
+ _session_connections.add_connection (_session->locations()->removed.connect (sigc::mem_fun(*this, &Editor::location_gone)));
+ _session_connections.add_connection (_session->locations()->changed.connect (sigc::mem_fun(*this, &Editor::refresh_location_display)));
+ _session_connections.add_connection (_session->locations()->StateChanged.connect (sigc::mem_fun(*this, &Editor::refresh_location_display_s)));
+ _session_connections.add_connection (_session->locations()->end_location()->changed.connect (sigc::mem_fun(*this, &Editor::end_location_changed)));
handle_new_duration ();
restore_ruler_visibility ();
//tempo_map_changed (Change (0));
- session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
+ _session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
(static_cast<TimeAxisView*>(*i))->set_samples_per_unit (frames_per_unit);
@@ -1173,15 +1177,7 @@ Editor::connect_to_session (Session *t)
}
/* register for undo history */
- session->register_with_memento_command_factory(_id, this);
-
- _summary->connect_to_session (session);
- _group_tabs->connect_to_session (session);
- _route_groups->connect_to_session (session);
- _regions->connect_to_session (session);
- _snapshots->connect_to_session (session);
- _routes->connect_to_session (session);
- _locations->connect_to_session (session);
+ _session->register_with_memento_command_factory(_id, this);
start_updating ();
}
@@ -1561,8 +1557,8 @@ Editor::analyze_region_selection()
if (analysis_window == 0) {
analysis_window = new AnalysisWindow();
- if (session != 0)
- analysis_window->set_session(session);
+ if (_session != 0)
+ analysis_window->set_session(_session);
analysis_window->show_all();
}
@@ -1579,8 +1575,8 @@ Editor::analyze_range_selection()
if (analysis_window == 0) {
analysis_window = new AnalysisWindow();
- if (session != 0)
- analysis_window->set_session(session);
+ if (_session != 0)
+ analysis_window->set_session(_session);
analysis_window->show_all();
}
@@ -2268,7 +2264,7 @@ Editor::set_state (const XMLNode& node, int /*version*/)
set_default_size (g.base_width, g.base_height);
move (x, y);
- if (session && (prop = node.property ("playhead"))) {
+ if (_session && (prop = node.property ("playhead"))) {
nframes64_t pos = atol (prop->value().c_str());
playhead_cursor->set_position (pos);
} else {
@@ -2515,7 +2511,7 @@ Editor::trackview_by_y_position (double y)
void
Editor::snap_to_with_modifier (nframes64_t& start, GdkEvent const * event, int32_t direction, bool for_mark)
{
- if (!session) {
+ if (!_session) {
return;
}
@@ -2533,7 +2529,7 @@ Editor::snap_to_with_modifier (nframes64_t& start, GdkEvent const * event, int32
void
Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
{
- if (!session || _snap_mode == SnapOff) {
+ if (!_session || _snap_mode == SnapOff) {
return;
}
@@ -2543,24 +2539,24 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
void
Editor::timecode_snap_to_internal (nframes64_t& start, int32_t direction, bool /*for_mark*/)
{
- const nframes64_t one_timecode_second = (nframes64_t)(rint(session->timecode_frames_per_second()) * session->frames_per_timecode_frame());
- nframes64_t one_timecode_minute = (nframes64_t)(rint(session->timecode_frames_per_second()) * session->frames_per_timecode_frame() * 60);
+ const nframes64_t one_timecode_second = (nframes64_t)(rint(_session->timecode_frames_per_second()) * _session->frames_per_timecode_frame());
+ nframes64_t one_timecode_minute = (nframes64_t)(rint(_session->timecode_frames_per_second()) * _session->frames_per_timecode_frame() * 60);
switch (_snap_type) {
case SnapToTimecodeFrame:
- if (((direction == 0) && (fmod((double)start, (double)session->frames_per_timecode_frame()) > (session->frames_per_timecode_frame() / 2))) || (direction > 0)) {
- start = (nframes64_t) (ceil ((double) start / session->frames_per_timecode_frame()) * session->frames_per_timecode_frame());
+ if (((direction == 0) && (fmod((double)start, (double)_session->frames_per_timecode_frame()) > (_session->frames_per_timecode_frame() / 2))) || (direction > 0)) {
+ start = (nframes64_t) (ceil ((double) start / _session->frames_per_timecode_frame()) * _session->frames_per_timecode_frame());
} else {
- start = (nframes64_t) (floor ((double) start / session->frames_per_timecode_frame()) * session->frames_per_timecode_frame());
+ start = (nframes64_t) (floor ((double) start / _session->frames_per_timecode_frame()) * _session->frames_per_timecode_frame());
}
break;
case SnapToTimecodeSeconds:
- if (session->timecode_offset_negative())
+ if (_session->timecode_offset_negative())
{
- start += session->timecode_offset ();
+ start += _session->timecode_offset ();
} else {
- start -= session->timecode_offset ();
+ start -= _session->timecode_offset ();
}
if (((direction == 0) && (start % one_timecode_second > one_timecode_second / 2)) || direction > 0) {
start = (nframes64_t) ceil ((double) start / one_timecode_second) * one_timecode_second;
@@ -2568,31 +2564,31 @@ Editor::timecode_snap_to_internal (nframes64_t& start, int32_t direction, bool /
start = (nframes64_t) floor ((double) start / one_timecode_second) * one_timecode_second;
}
- if (session->timecode_offset_negative())
+ if (_session->timecode_offset_negative())
{
- start -= session->timecode_offset ();
+ start -= _session->timecode_offset ();
} else {
- start += session->timecode_offset ();
+ start += _session->timecode_offset ();
}
break;
case SnapToTimecodeMinutes:
- if (session->timecode_offset_negative())
+ if (_session->timecode_offset_negative())
{
- start += session->timecode_offset ();
+ start += _session->timecode_offset ();
} else {
- start -= session->timecode_offset ();
+ start -= _session->timecode_offset ();
}
if (((direction == 0) && (start % one_timecode_minute > one_timecode_minute / 2)) || direction > 0) {
start = (nframes64_t) ceil ((double) start / one_timecode_minute) * one_timecode_minute;
} else {
start = (nframes64_t) floor ((double) start / one_timecode_minute) * one_timecode_minute;
}
- if (session->timecode_offset_negative())
+ if (_session->timecode_offset_negative())
{
- start -= session->timecode_offset ();
+ start -= _session->timecode_offset ();
} else {
- start += session->timecode_offset ();
+ start += _session->timecode_offset ();
}
break;
default:
@@ -2604,8 +2600,8 @@ Editor::timecode_snap_to_internal (nframes64_t& start, int32_t direction, bool /
void
Editor::snap_to_internal (nframes64_t& start, int32_t direction, bool for_mark)
{
- const nframes64_t one_second = session->frame_rate();
- const nframes64_t one_minute = session->frame_rate() * 60;
+ const nframes64_t one_second = _session->frame_rate();
+ const nframes64_t one_minute = _session->frame_rate() * 60;
nframes64_t presnap = start;
nframes64_t before;
nframes64_t after;
@@ -2641,31 +2637,31 @@ Editor::snap_to_internal (nframes64_t& start, int32_t direction, bool for_mark)
break;
case SnapToBar:
- start = session->tempo_map().round_to_bar (start, direction);
+ start = _session->tempo_map().round_to_bar (start, direction);
break;
case SnapToBeat:
- start = session->tempo_map().round_to_beat (start, direction);
+ start = _session->tempo_map().round_to_beat (start, direction);
break;
case SnapToAThirtysecondBeat:
- start = session->tempo_map().round_to_beat_subdivision (start, 32, direction);
+ start = _session->tempo_map().round_to_beat_subdivision (start, 32, direction);
break;
case SnapToASixteenthBeat:
- start = session->tempo_map().round_to_beat_subdivision (start, 16, direction);
+ start = _session->tempo_map().round_to_beat_subdivision (start, 16, direction);
break;
case SnapToAEighthBeat:
- start = session->tempo_map().round_to_beat_subdivision (start, 8, direction);
+ start = _session->tempo_map().round_to_beat_subdivision (start, 8, direction);
break;
case SnapToAQuarterBeat:
- start = session->tempo_map().round_to_beat_subdivision (start, 4, direction);
+ start = _session->tempo_map().round_to_beat_subdivision (start, 4, direction);
break;
case SnapToAThirdBeat:
- start = session->tempo_map().round_to_beat_subdivision (start, 3, direction);
+ start = _session->tempo_map().round_to_beat_subdivision (start, 3, direction);
break;
case SnapToMark:
@@ -2673,7 +2669,7 @@ Editor::snap_to_internal (nframes64_t& start, int32_t direction, bool for_mark)
return;
}
- session->locations()->marks_either_side (start, before, after);
+ _session->locations()->marks_either_side (start, before, after);
if (before == max_frames) {
start = after;
@@ -2971,8 +2967,8 @@ Editor::midi_panic ()
{
cerr << "MIDI panic\n";
- if (session) {
- session->midi_panic();
+ if (_session) {
+ _session->midi_panic();
}
}
@@ -3008,7 +3004,7 @@ Editor::convert_drop_to_paths (
guint /*info*/,
guint /*time*/)
{
- if (session == 0) {
+ if (_session == 0) {
return -1;
}
@@ -3120,7 +3116,7 @@ Editor::map_transport_state ()
{
ENSURE_GUI_THREAD (*this, &Editor::map_transport_state)
- if (session->transport_stopped()) {
+ if (_session->transport_stopped()) {
have_pending_keyboard_selection = false;
}
@@ -3162,17 +3158,17 @@ Editor::restore_state (State *state)
void
Editor::begin_reversible_command (string name)
{
- if (session) {
+ if (_session) {
before = &get_state();
- session->begin_reversible_command (name);
+ _session->begin_reversible_command (name);
}
}
void
Editor::commit_reversible_command ()
{
- if (session) {
- session->commit_reversible_command (new MementoCommand<Editor>(*this, before, &get_state()));
+ if (_session) {
+ _session->commit_reversible_command (new MementoCommand<Editor>(*this, before, &get_state()));
}
}
@@ -3205,20 +3201,20 @@ Editor::history_changed ()
{
string label;
- if (undo_action && session) {
- if (session->undo_depth() == 0) {
+ if (undo_action && _session) {
+ if (_session->undo_depth() == 0) {
label = _("Undo");
} else {
- label = string_compose(_("Undo (%1)"), session->next_undo());
+ label = string_compose(_("Undo (%1)"), _session->next_undo());
}
undo_action->property_label() = label;
}
- if (redo_action && session) {
- if (session->redo_depth() == 0) {
+ if (redo_action && _session) {
+ if (_session->redo_depth() == 0) {
label = _("Redo");
} else {
- label = string_compose(_("Redo (%1)"), session->next_redo());
+ label = string_compose(_("Redo (%1)"), _session->next_redo());
}
redo_action->property_label() = label;
}
@@ -3394,7 +3390,7 @@ Editor::cycle_edit_mode ()
void
Editor::edit_mode_selection_done ()
{
- if (session == 0) {
+ if (_session == 0) {
return;
}
@@ -3735,7 +3731,7 @@ Editor::edit_xfade (boost::weak_ptr<Crossfade> wxfade)
return;
}
- CrossfadeEditor cew (*session, xfade, xfade->fade_in().get_min_y(), 1.0);
+ CrossfadeEditor cew (_session, xfade, xfade->fade_in().get_min_y(), 1.0);
ensure_float (cew);
@@ -3787,8 +3783,8 @@ Editor::get_grid_type_as_beats (bool& success, nframes64_t position)
break;
case SnapToBar:
- if (session) {
- return session->tempo_map().meter_at (position).beats_per_bar();
+ if (_session) {
+ return _session->tempo_map().meter_at (position).beats_per_bar();
}
break;
@@ -3899,8 +3895,8 @@ Editor::finish_cleanup ()
Location*
Editor::transport_loop_location()
{
- if (session) {
- return session->locations()->auto_loop_location();
+ if (_session) {
+ return _session->locations()->auto_loop_location();
} else {
return 0;
}
@@ -3909,8 +3905,8 @@ Editor::transport_loop_location()
Location*
Editor::transport_punch_location()
{
- if (session) {
- return session->locations()->auto_punch_location();
+ if (_session) {
+ return _session->locations()->auto_punch_location();
} else {
return 0;
}
@@ -4001,7 +3997,7 @@ Editor::new_playlists (TimeAxisView* v)
{
begin_reversible_command (_("new playlists"));
vector<boost::shared_ptr<ARDOUR::Playlist> > playlists;
- session->playlists->get (playlists);
+ _session->playlists->get (playlists);
mapover_tracks (sigc::bind (sigc::mem_fun (*this, &Editor::mapped_use_new_playlist), playlists), v, RouteGroup::Edit);
commit_reversible_command ();
}
@@ -4017,7 +4013,7 @@ Editor::copy_playlists (TimeAxisView* v)
{
begin_reversible_command (_("copy playlists"));
vector<boost::shared_ptr<ARDOUR::Playlist> > playlists;
- session->playlists->get (playlists);
+ _session->playlists->get (playlists);
mapover_tracks (sigc::bind (sigc::mem_fun (*this, &Editor::mapped_use_copy_playlist), playlists), v, RouteGroup::Edit);
commit_reversible_command ();
}
@@ -4032,7 +4028,7 @@ Editor::clear_playlists (TimeAxisView* v)
{
begin_reversible_command (_("clear playlists"));
vector<boost::shared_ptr<ARDOUR::Playlist> > playlists;
- session->playlists->get (playlists);
+ _session->playlists->get (playlists);
mapover_tracks (sigc::mem_fun (*this, &Editor::mapped_clear_playlist), v, RouteGroup::Edit);
commit_reversible_command ();
}
@@ -4239,8 +4235,8 @@ Editor::post_zoom ()
ZoomChanged (); /* EMIT_SIGNAL */
- if (session) {
- cef = session->current_end_frame() + (current_page_frames() / 10);// Add a little extra so we can see the end marker
+ if (_session) {
+ cef = _session->current_end_frame() + (current_page_frames() / 10);// Add a little extra so we can see the end marker
}
horizontal_adjustment.set_upper (cef / frames_per_unit);
@@ -4265,7 +4261,7 @@ Editor::queue_visual_change (nframes64_t where)
can reach.
*/
- if (session && (where > session->current_end_frame())) {
+ if (_session && (where > _session->current_end_frame())) {
horizontal_adjustment.set_upper ((where + current_page_frames()) / frames_per_unit);
}
@@ -4332,9 +4328,9 @@ Editor::idle_visual_changer ()
nframes64_t csf=0, cef=0;
nframes64_t current_time_origin = (nframes64_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
- if (session) {
- csf = session->current_start_frame();
- cef = session->current_end_frame();
+ if (_session) {
+ csf = _session->current_start_frame();
+ cef = _session->current_end_frame();
}
/* if we seek beyond the current end of the canvas, move the end */
@@ -4397,7 +4393,7 @@ Editor::get_preferred_edit_position (bool ignore_playhead)
switch (ep) {
case EditAtPlayhead:
- where = session->audible_frame();
+ where = _session->audible_frame();
break;
case EditAtSelectedMarker:
@@ -4431,7 +4427,7 @@ Editor::get_preferred_edit_position (bool ignore_playhead)
void
Editor::set_loop_range (nframes64_t start, nframes64_t end, string cmd)
{
- if (!session) return;
+ if (!_session) return;
begin_reversible_command (cmd);
@@ -4439,17 +4435,17 @@ Editor::set_loop_range (nframes64_t start, nframes64_t end, string cmd)
if ((tll = transport_loop_location()) == 0) {
Location* loc = new Location (start, end, _("Loop"), Location::IsAutoLoop);
- XMLNode &before = session->locations()->get_state();
- session->locations()->add (loc, true);
- session->set_auto_loop_location (loc);
- XMLNode &after = session->locations()->get_state();
- session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
+ XMLNode &before = _session->locations()->get_state();
+ _session->locations()->add (loc, true);
+ _session->set_auto_loop_location (loc);
+ XMLNode &after = _session->locations()->get_state();
+ _session->add_command (new MementoCommand<Locations>(*(_session->locations()), &before, &after));
} else {
XMLNode &before = tll->get_state();
tll->set_hidden (false, this);
tll->set (start, end);
XMLNode &after = tll->get_state();
- session->add_command (new MementoCommand<Location>(*tll, &before, &after));
+ _session->add_command (new MementoCommand<Location>(*tll, &before, &after));
}
commit_reversible_command ();
@@ -4458,7 +4454,7 @@ Editor::set_loop_range (nframes64_t start, nframes64_t end, string cmd)
void
Editor::set_punch_range (nframes64_t start, nframes64_t end, string cmd)
{
- if (!session) return;
+ if (!_session) return;
begin_reversible_command (cmd);
@@ -4466,18 +4462,18 @@ Editor::set_punch_range (nframes64_t start, nframes64_t end, string cmd)
if ((tpl = transport_punch_location()) == 0) {
Location* loc = new Location (start, end, _("Loop"), Location::IsAutoPunch);
- XMLNode &before = session->locations()->get_state();
- session->locations()->add (loc, true);
- session->set_auto_loop_location (loc);
- XMLNode &after = session->locations()->get_state();
- session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
+ XMLNode &before = _session->locations()->get_state();
+ _session->locations()->add (loc, true);
+ _session->set_auto_loop_location (loc);
+ XMLNode &after = _session->locations()->get_state();
+ _session->add_command (new MementoCommand<Locations>(*(_session->locations()), &before, &after));
}
else {
XMLNode &before = tpl->get_state();
tpl->set_hidden (false, this);
tpl->set (start, end);
XMLNode &after = tpl->get_state();
- session->add_command (new MementoCommand<Location>(*tpl, &before, &after));
+ _session->add_command (new MementoCommand<Location>(*tpl, &before, &after));
}
commit_reversible_command ();
@@ -4643,7 +4639,7 @@ Editor::show_rhythm_ferret ()
rhythm_ferret = new RhythmFerret(*this);
}
- rhythm_ferret->set_session (session);
+ rhythm_ferret->set_session (_session);
rhythm_ferret->show ();
rhythm_ferret->present ();
}
@@ -4652,7 +4648,7 @@ void
Editor::show_global_port_matrix (ARDOUR::DataType t)
{
if (_global_port_matrix[t] == 0) {
- _global_port_matrix[t] = new GlobalPortMatrixWindow (session, t);
+ _global_port_matrix[t] = new GlobalPortMatrixWindow (_session, t);
}
_global_port_matrix[t]->show ();
@@ -4818,9 +4814,9 @@ Editor::handle_new_route (RouteList& routes)
DataType dt = route->input()->default_type();
if (dt == ARDOUR::DataType::AUDIO) {
- rtv = new AudioTimeAxisView (*this, *session, route, *track_canvas);
+ rtv = new AudioTimeAxisView (*this, _session, route, *track_canvas);
} else if (dt == ARDOUR::DataType::MIDI) {
- rtv = new MidiTimeAxisView (*this, *session, route, *track_canvas);
+ rtv = new MidiTimeAxisView (*this, _session, route, *track_canvas);
} else {
throw unknown_type();
}
@@ -4833,7 +4829,7 @@ Editor::handle_new_route (RouteList& routes)
rtv->view()->RegionViewAdded.connect (sigc::mem_fun (*this, &Editor::region_view_added));
rtv->view()->HeightChanged.connect (sigc::mem_fun (*this, &Editor::streamview_height_changed));
- rtv->GoingAway.connect (sigc::bind (sigc::mem_fun(*this, &Editor::remove_route), rtv));
+ scoped_connect (rtv->GoingAway, boost::bind (&Editor::remove_route, this, rtv));
}
_routes->routes_added (new_views);
@@ -4954,18 +4950,18 @@ Editor::consider_auditioning (boost::shared_ptr<Region> region)
boost::shared_ptr<AudioRegion> r = boost::dynamic_pointer_cast<AudioRegion> (region);
if (r == 0) {
- session->cancel_audition ();
+ _session->cancel_audition ();
return;
}
- if (session->is_auditioning()) {
- session->cancel_audition ();
+ if (_session->is_auditioning()) {
+ _session->cancel_audition ();
if (r == last_audition_region) {
return;
}
}
- session->audition_region (r);
+ _session->audition_region (r);
last_audition_region = r;
}
@@ -4979,7 +4975,7 @@ Editor::hide_a_region (boost::shared_ptr<Region> r)
void
Editor::remove_a_region (boost::shared_ptr<Region> r)
{
- session->remove_region_from_region_list (r);
+ _session->remove_region_from_region_list (r);
}
void
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 36895bf784..a29df6ebb6 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -46,6 +46,8 @@
#include <gtkmm2ext/dndtreeview.h>
#include "pbd/stateful.h"
+#include "pbd/scoped_connections.h"
+
#include "ardour/import_status.h"
#include "ardour/tempo.h"
#include "ardour/location.h"
@@ -155,14 +157,15 @@ struct EditorCursor {
sigc::signal<void, nframes64_t> PositionChanged;
};
-class Editor : public PublicEditor
+class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr
{
public:
Editor ();
~Editor ();
- void connect_to_session (ARDOUR::Session *);
- ARDOUR::Session* current_session() const { return session; }
+ void set_session (ARDOUR::Session *);
+ ARDOUR::Session* session() const { return _session; }
+
void first_idle ();
virtual bool have_idled () const { return _have_idled; }
@@ -443,7 +446,6 @@ class Editor : public PublicEditor
void color_handler ();
- ARDOUR::Session *session; ///< The session that we are editing, or 0
bool constructed;
// to keep track of the playhead position for control_scroll
@@ -1893,7 +1895,7 @@ public:
int playlist_deletion_dialog (boost::shared_ptr<ARDOUR::Playlist>);
- std::vector<sigc::connection> session_connections;
+ PBD::ScopedConnectionList session_connections;
/* tracking step changes of track height */
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index bc7d5ee7af..ac98482f4e 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -956,7 +956,7 @@ Editor::set_summary ()
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("ToggleSummary"));
if (act) {
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
- session->config.set_show_summary (tact->get_active ());
+ _session->config.set_show_summary (tact->get_active ());
}
}
@@ -966,7 +966,7 @@ Editor::set_group_tabs ()
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("ToggleGroupTabs"));
if (act) {
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
- session->config.set_show_group_tabs (tact->get_active ());
+ _session->config.set_show_group_tabs (tact->get_active ());
}
}
@@ -1350,7 +1350,7 @@ Editor::parameter_changed (std::string p)
toggle_meter_updating();
} else if (p == "show-summary") {
- bool const s = session->config.get_show_summary ();
+ bool const s = _session->config.get_show_summary ();
if (s) {
_summary->show ();
} else {
@@ -1366,7 +1366,7 @@ Editor::parameter_changed (std::string p)
}
} else if (p == "show-group-tabs") {
- bool const s = session->config.get_show_group_tabs ();
+ bool const s = _session->config.get_show_group_tabs ();
if (s) {
_group_tabs->show ();
} else {
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index 6ae445d828..108dcde7d3 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -73,14 +73,14 @@ using Glib::ustring;
void
Editor::add_external_audio_action (ImportMode mode_hint)
{
- if (session == 0) {
+ if (_session == 0) {
MessageDialog msg (_("You can't import or embed an audiofile until you have a session loaded."));
msg.run ();
return;
}
-
+
if (sfbrowser == 0) {
- sfbrowser = new SoundFileOmega (*this, _("Add Existing Media"), session, 0, true, mode_hint);
+ sfbrowser = new SoundFileOmega (*this, _("Add Existing Media"), _session, 0, true, mode_hint);
} else {
sfbrowser->set_mode (mode_hint);
}
@@ -94,7 +94,7 @@ Editor::external_audio_dialog ()
vector<Glib::ustring> paths;
uint32_t track_cnt;
- if (session == 0) {
+ if (_session == 0) {
MessageDialog msg (_("You can't import or embed an audiofile until you have a session loaded."));
msg.run ();
return;
@@ -113,7 +113,7 @@ Editor::external_audio_dialog ()
}
if (sfbrowser == 0) {
- sfbrowser = new SoundFileOmega (*this, _("Add Existing Media"), session, track_cnt, true);
+ sfbrowser = new SoundFileOmega (*this, _("Add Existing Media"), _session, track_cnt, true);
} else {
sfbrowser->reset (track_cnt);
}
@@ -163,7 +163,7 @@ Editor::external_audio_dialog ()
where = playhead_cursor->current_frame;
break;
case ImportAtStart:
- where = session->current_start_frame();
+ where = _session->current_start_frame();
break;
}
@@ -187,7 +187,7 @@ Editor::external_audio_dialog ()
void
Editor::session_import_dialog ()
{
- SessionImportDialog dialog (*session);
+ SessionImportDialog dialog (_session);
ensure_float (dialog);
dialog.run ();
}
@@ -211,7 +211,7 @@ Editor::check_whether_and_how_to_import(string path, bool all_or_nothing)
{
string wave_name (Glib::path_get_basename(path));
- SourceMap all_sources = session->get_sources();
+ SourceMap all_sources = _session->get_sources();
bool wave_name_exists = false;
for (SourceMap::iterator i = all_sources.begin(); i != all_sources.end(); ++i) {
@@ -450,7 +450,7 @@ Editor::do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mode
out:
if (ok) {
- session->save_state ("");
+ _session->save_state ("");
}
}
@@ -509,7 +509,7 @@ Editor::import_sndfiles (vector<ustring> paths, ImportMode mode, SrcQuality qual
import_status.target_regions,
import_status.target_tracks,
import_status.track, false) == 0) {
- session->save_state ("");
+ _session->save_state ("");
}
/* update position from results */
@@ -545,7 +545,7 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
/* lets see if we can link it into the session */
- sys::path tmp = session->session_directory().sound_path() / Glib::path_get_basename(path);
+ sys::path tmp = _session->session_directory().sound_path() / Glib::path_get_basename(path);
linked_path = tmp.to_string();
path_to_use = linked_path;
@@ -587,7 +587,7 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
goto out;
}
- if (check_sample_rate && (finfo.samplerate != (int) session->frame_rate())) {
+ if (check_sample_rate && (finfo.samplerate != (int) _session->frame_rate())) {
vector<string> choices;
if (multifile) {
@@ -650,10 +650,10 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
boost::shared_ptr<Source> s;
- if ((s = session->source_by_path_and_channel (path, n)) == 0) {
+ if ((s = _session->source_by_path_and_channel (path, n)) == 0) {
source = boost::dynamic_pointer_cast<AudioFileSource> (
- SourceFactory::createReadable (DataType::AUDIO, *session,
+ SourceFactory::createReadable (DataType::AUDIO, *_session,
path_to_use, n,
(mode == ImportAsTapeTrack
? Source::Destructive
@@ -763,7 +763,7 @@ Editor::add_sources (vector<Glib::ustring> paths, SourceList& sources, nframes64
}
if (Config->get_output_auto_connect() & AutoConnectMaster) {
- output_chan = (session->master_out() ? session->master_out()->n_inputs().n_audio() : input_chan);
+ output_chan = (_session->master_out() ? _session->master_out()->n_inputs().n_audio() : input_chan);
} else {
output_chan = input_chan;
}
@@ -822,7 +822,7 @@ Editor::finish_bringing_in_material (boost::shared_ptr<Region> region, uint32_t
begin_reversible_command (_("insert file"));
XMLNode &before = playlist->get_state();
playlist->add_region (copy, pos);
- session->add_command (new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
+ _session->add_command (new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
commit_reversible_command ();
break;
}
@@ -831,7 +831,7 @@ Editor::finish_bringing_in_material (boost::shared_ptr<Region> region, uint32_t
{
if (!existing_track) {
if (ar) {
- list<boost::shared_ptr<AudioTrack> > at (session->new_audio_track (in_chans, out_chans, Normal, 0, 1));
+ list<boost::shared_ptr<AudioTrack> > at (_session->new_audio_track (in_chans, out_chans, Normal, 0, 1));
if (at.empty()) {
return -1;
@@ -839,7 +839,7 @@ Editor::finish_bringing_in_material (boost::shared_ptr<Region> region, uint32_t
existing_track = at.front();
} else if (mr) {
- list<boost::shared_ptr<MidiTrack> > mt (session->new_midi_track (Normal, 0, 1));
+ list<boost::shared_ptr<MidiTrack> > mt (_session->new_midi_track (Normal, 0, 1));
if (mt.empty()) {
return -1;
@@ -862,7 +862,7 @@ Editor::finish_bringing_in_material (boost::shared_ptr<Region> region, uint32_t
if (!ar)
return -1;
- list<boost::shared_ptr<AudioTrack> > at (session->new_audio_track (in_chans, out_chans, Destructive));
+ list<boost::shared_ptr<AudioTrack> > at (_session->new_audio_track (in_chans, out_chans, Destructive));
if (!at.empty()) {
boost::shared_ptr<Region> copy (RegionFactory::create (region));
at.front()->set_name (basename_nosuffix (copy->name()));
@@ -887,7 +887,7 @@ Editor::_import_thread (void *arg)
void *
Editor::import_thread ()
{
- session->import_audiofiles (import_status);
+ _session->import_audiofiles (import_status);
pthread_exit_pbd (0);
/*NOTREACHED*/
return 0;
diff --git a/gtk2_ardour/editor_audiotrack.cc b/gtk2_ardour/editor_audiotrack.cc
index 9baa689e51..ea703c415c 100644
--- a/gtk2_ardour/editor_audiotrack.cc
+++ b/gtk2_ardour/editor_audiotrack.cc
@@ -55,7 +55,7 @@ Editor::start_updating ()
RouteTimeAxisView* rtv;
//cerr << "Editor::start_updating () called" << endl;//DEBUG
- if (is_mapped() && session) {
+ if (is_mapped() && _session) {
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
if ((rtv = dynamic_cast<RouteTimeAxisView*>(*i)) != 0) {
rtv->reset_meter ();
@@ -78,7 +78,7 @@ Editor::stop_updating ()
meters_running = false;
fast_screen_update_connection.disconnect();
//cerr << "Editor::stop_updating () called" << endl;//DEBUG
- if (is_mapped() && session) {
+ if (is_mapped() && _session) {
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
if ((rtv = dynamic_cast<RouteTimeAxisView*>(*i)) != 0) {
rtv->hide_meter ();
@@ -105,7 +105,7 @@ Editor::fast_update_strips ()
{
RouteTimeAxisView* rtv;
- if (is_mapped() && session) {
+ if (is_mapped() && _session) {
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
if ((rtv = dynamic_cast<RouteTimeAxisView*>(*i)) != 0) {
rtv->fast_update ();
diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc
index 97df092faa..f5eb29195f 100644
--- a/gtk2_ardour/editor_canvas.cc
+++ b/gtk2_ardour/editor_canvas.cc
@@ -329,7 +329,7 @@ Editor::track_canvas_size_allocated ()
_canvas_width = canvas_allocation.get_width();
_canvas_height = canvas_allocation.get_height();
- if (session) {
+ if (_session) {
TrackViewList::iterator i;
double height = 0;
@@ -725,7 +725,7 @@ Editor::autoscroll_canvas ()
void
Editor::start_canvas_autoscroll (int dx, int dy)
{
- if (!session || autoscroll_active) {
+ if (!_session || autoscroll_active) {
return;
}
@@ -896,8 +896,8 @@ Editor::color_handler()
/*
redisplay_tempo (true);
- if (session)
- session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks); // redraw metric markers
+ if (_session)
+ _session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks); // redraw metric markers
*/
}
diff --git a/gtk2_ardour/editor_component.cc b/gtk2_ardour/editor_component.cc
index 149ce6717c..e016f5bb50 100644
--- a/gtk2_ardour/editor_component.cc
+++ b/gtk2_ardour/editor_component.cc
@@ -17,33 +17,10 @@
*/
-#include "ardour/session.h"
#include "editor_component.h"
-using namespace std;
-using namespace ARDOUR;
-
EditorComponent::EditorComponent (Editor* e)
- : _editor (e),
- _session (0)
+ : _editor (e)
{
-
}
-void
-EditorComponent::connect_to_session (Session* s)
-{
- _session = s;
-
- _session_connections.push_back (_session->GoingAway.connect (sigc::mem_fun (*this, &EditorComponent::session_going_away)));
-}
-
-void
-EditorComponent::session_going_away ()
-{
- for (list<sigc::connection>::iterator i = _session_connections.begin(); i != _session_connections.end(); ++i) {
- i->disconnect ();
- }
-
- _session = 0;
-}
diff --git a/gtk2_ardour/editor_component.h b/gtk2_ardour/editor_component.h
index 5c1ae8be2a..5b4f7e15d8 100644
--- a/gtk2_ardour/editor_component.h
+++ b/gtk2_ardour/editor_component.h
@@ -21,32 +21,19 @@
#define __ardour_gtk_editor_component_h__
#include <list>
-#include <sigc++/sigc++.h>
-namespace ARDOUR {
- class Session;
-}
+#include "ardour/session_handle.h"
class Editor;
-class EditorComponent
+class EditorComponent : public ARDOUR::SessionHandlePtr
{
public:
EditorComponent (Editor *);
virtual ~EditorComponent() {}
- virtual void connect_to_session (ARDOUR::Session *);
-
protected:
-
Editor* _editor;
- ARDOUR::Session* _session;
- std::list<sigc::connection> _session_connections;
-
-private:
-
- void session_going_away ();
-
};
#endif
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index 5ec2cb0439..bd97d42b4b 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -116,7 +116,7 @@ Drag::start_grab (GdkEvent* event, Gdk::Cursor *cursor)
*cursor,
event->button.time);
- if (_editor->session && _editor->session->transport_rolling()) {
+ if (_editor->session() && _editor->session()->transport_rolling()) {
_was_rolling = true;
} else {
_was_rolling = false;
@@ -237,7 +237,7 @@ RegionDrag::RegionDrag (Editor* e, ArdourCanvas::Item* i, RegionView* p, list<Re
_primary (p),
_views (v)
{
- RegionView::RegionViewGoingAway.connect (sigc::mem_fun (*this, &RegionDrag::region_going_away));
+ death_connection = RegionView::RegionViewGoingAway.connect (sigc::mem_fun (*this, &RegionDrag::region_going_away));
}
void
@@ -828,7 +828,7 @@ RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred)
insert_result = modified_playlists.insert (to_playlist);
if (insert_result.second) {
- _editor->session->add_command (new MementoCommand<Playlist>(*to_playlist, &to_playlist->get_state(), 0));
+ _editor->session()->add_command (new MementoCommand<Playlist>(*to_playlist, &to_playlist->get_state(), 0));
}
to_playlist->add_region (new_region, where);
@@ -868,7 +868,7 @@ RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred)
insert_result = modified_playlists.insert (playlist);
if (insert_result.second) {
- _editor->session->add_command (new MementoCommand<Playlist>(*playlist, &playlist->get_state(), 0));
+ _editor->session()->add_command (new MementoCommand<Playlist>(*playlist, &playlist->get_state(), 0));
}
/* freeze to avoid lots of relayering in the case of a multi-region drag */
frozen_insert_result = frozen_playlists.insert(playlist);
@@ -910,7 +910,7 @@ RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred)
insert_result = modified_playlists.insert (from_playlist);
if (insert_result.second) {
- _editor->session->add_command (new MementoCommand<Playlist>(*from_playlist, &from_playlist->get_state(), 0));
+ _editor->session()->add_command (new MementoCommand<Playlist>(*from_playlist, &from_playlist->get_state(), 0));
}
from_playlist->remove_region (rv->region());
@@ -960,7 +960,7 @@ RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred)
out:
for (set<boost::shared_ptr<Playlist> >::iterator p = modified_playlists.begin(); p != modified_playlists.end(); ++p) {
- _editor->session->add_command (new MementoCommand<Playlist>(*(*p), 0, &(*p)->get_state()));
+ _editor->session()->add_command (new MementoCommand<Playlist>(*(*p), 0, &(*p)->get_state()));
}
_editor->commit_reversible_command ();
@@ -1245,7 +1245,7 @@ RegionInsertDrag::finished (GdkEvent* /*event*/, bool /*movement_occurred*/)
_editor->begin_reversible_command (_("insert region"));
XMLNode& before = playlist->get_state ();
playlist->add_region (_primary->region (), _last_frame_position);
- _editor->session->add_command (new MementoCommand<Playlist> (*playlist, &before, &playlist->get_state()));
+ _editor->session()->add_command (new MementoCommand<Playlist> (*playlist, &before, &playlist->get_state()));
_editor->commit_reversible_command ();
delete _primary;
@@ -1570,7 +1570,7 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
insert_result = _editor->motion_frozen_playlists.insert (pl);
if (insert_result.second) {
- _editor->session->add_command(new MementoCommand<Playlist>(*pl, &pl->get_state(), 0));
+ _editor->session()->add_command(new MementoCommand<Playlist>(*pl, &pl->get_state(), 0));
pl->freeze();
}
}
@@ -1668,7 +1668,7 @@ TrimDrag::finished (GdkEvent* event, bool movement_occurred)
for (set<boost::shared_ptr<Playlist> >::iterator p = _editor->motion_frozen_playlists.begin(); p != _editor->motion_frozen_playlists.end(); ++p) {
(*p)->thaw ();
if (_have_transaction) {
- _editor->session->add_command (new MementoCommand<Playlist>(*(*p).get(), 0, &(*p)->get_state()));
+ _editor->session()->add_command (new MementoCommand<Playlist>(*(*p).get(), 0, &(*p)->get_state()));
}
}
@@ -1750,7 +1750,7 @@ MeterMarkerDrag::finished (GdkEvent* event, bool movement_occurred)
BBT_Time when;
- TempoMap& map (_editor->session->tempo_map());
+ TempoMap& map (_editor->session()->tempo_map());
map.bbt_time (_last_pointer_frame, when);
if (_copy == true) {
@@ -1758,7 +1758,7 @@ MeterMarkerDrag::finished (GdkEvent* event, bool movement_occurred)
XMLNode &before = map.get_state();
map.add_meter (_marker->meter(), when);
XMLNode &after = map.get_state();
- _editor->session->add_command(new MementoCommand<TempoMap>(map, &before, &after));
+ _editor->session()->add_command(new MementoCommand<TempoMap>(map, &before, &after));
_editor->commit_reversible_command ();
// delete the dummy marker we used for visual representation of copying.
@@ -1769,7 +1769,7 @@ MeterMarkerDrag::finished (GdkEvent* event, bool movement_occurred)
XMLNode &before = map.get_state();
map.move_meter (_marker->meter(), when);
XMLNode &after = map.get_state();
- _editor->session->add_command(new MementoCommand<TempoMap>(map, &before, &after));
+ _editor->session()->add_command(new MementoCommand<TempoMap>(map, &before, &after));
_editor->commit_reversible_command ();
}
}
@@ -1842,7 +1842,7 @@ TempoMarkerDrag::finished (GdkEvent* event, bool movement_occurred)
BBT_Time when;
- TempoMap& map (_editor->session->tempo_map());
+ TempoMap& map (_editor->session()->tempo_map());
map.bbt_time (_last_pointer_frame, when);
if (_copy == true) {
@@ -1850,7 +1850,7 @@ TempoMarkerDrag::finished (GdkEvent* event, bool movement_occurred)
XMLNode &before = map.get_state();
map.add_tempo (_marker->tempo(), when);
XMLNode &after = map.get_state();
- _editor->session->add_command (new MementoCommand<TempoMap>(map, &before, &after));
+ _editor->session()->add_command (new MementoCommand<TempoMap>(map, &before, &after));
_editor->commit_reversible_command ();
// delete the dummy marker we used for visual representation of copying.
@@ -1861,7 +1861,7 @@ TempoMarkerDrag::finished (GdkEvent* event, bool movement_occurred)
XMLNode &before = map.get_state();
map.move_tempo (_marker->tempo(), when);
XMLNode &after = map.get_state();
- _editor->session->add_command (new MementoCommand<TempoMap>(map, &before, &after));
+ _editor->session()->add_command (new MementoCommand<TempoMap>(map, &before, &after));
_editor->commit_reversible_command ();
}
}
@@ -1892,12 +1892,12 @@ CursorDrag::start_grab (GdkEvent* event, Gdk::Cursor* c)
if (_cursor == _editor->playhead_cursor) {
_editor->_dragging_playhead = true;
- if (_editor->session && _was_rolling && _stop) {
- _editor->session->request_stop ();
+ if (_editor->session() && _was_rolling && _stop) {
+ _editor->session()->request_stop ();
}
- if (_editor->session && _editor->session->is_auditioning()) {
- _editor->session->cancel_audition ();
+ if (_editor->session() && _editor->session()->is_auditioning()) {
+ _editor->session()->cancel_audition ();
}
}
@@ -1937,8 +1937,8 @@ CursorDrag::finished (GdkEvent* event, bool movement_occurred)
motion (event, false);
if (_item == &_editor->playhead_cursor->canvas_item) {
- if (_editor->session) {
- _editor->session->request_locate (_editor->playhead_cursor->current_frame, _was_rolling);
+ if (_editor->session()) {
+ _editor->session()->request_locate (_editor->playhead_cursor->current_frame, _was_rolling);
_editor->_pending_locate_request = true;
}
}
@@ -2031,7 +2031,7 @@ FadeInDrag::finished (GdkEvent* event, bool movement_occurred)
tmp->audio_region()->set_fade_in_active (true);
XMLNode &after = alist->get_state();
- _editor->session->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &after));
+ _editor->session()->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &after));
}
_editor->commit_reversible_command ();
@@ -2128,7 +2128,7 @@ FadeOutDrag::finished (GdkEvent* event, bool movement_occurred)
tmp->audio_region()->set_fade_out_active (true);
XMLNode &after = alist->get_state();
- _editor->session->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &after));
+ _editor->session()->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &after));
}
_editor->commit_reversible_command ();
@@ -2205,7 +2205,7 @@ MarkerDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
if (e < max_frames) {
++e;
}
- _editor->session->locations()->find_all_between (s, e, ll, Location::Flags (0));
+ _editor->session()->locations()->find_all_between (s, e, ll, Location::Flags (0));
for (Locations::LocationList::iterator i = ll.begin(); i != ll.end(); ++i) {
Editor::LocationMarkers* lm = _editor->find_location_markers (*i);
if (lm) {
@@ -2415,7 +2415,7 @@ MarkerDrag::finished (GdkEvent* event, bool movement_occurred)
_editor->_dragging_edit_point = false;
_editor->begin_reversible_command ( _("move marker") );
- XMLNode &before = _editor->session->locations()->get_state();
+ XMLNode &before = _editor->session()->locations()->get_state();
MarkerSelection::iterator i;
list<Location*>::iterator x;
@@ -2441,8 +2441,8 @@ MarkerDrag::finished (GdkEvent* event, bool movement_occurred)
}
}
- XMLNode &after = _editor->session->locations()->get_state();
- _editor->session->add_command(new MementoCommand<Locations>(*(_editor->session->locations()), &before, &after));
+ XMLNode &after = _editor->session()->locations()->get_state();
+ _editor->session()->add_command(new MementoCommand<Locations>(*(_editor->session()->locations()), &before, &after));
_editor->commit_reversible_command ();
_line->hide();
@@ -2855,9 +2855,9 @@ ScrubDrag::motion (GdkEvent* /*event*/, bool)
void
ScrubDrag::finished (GdkEvent* /*event*/, bool movement_occurred)
{
- if (movement_occurred && _editor->session) {
+ if (movement_occurred && _editor->session()) {
/* make sure we stop */
- _editor->session->request_transport_speed (0.0);
+ _editor->session()->request_transport_speed (0.0);
}
}
@@ -2875,7 +2875,7 @@ SelectionDrag::start_grab (GdkEvent* event, Gdk::Cursor*)
nframes64_t start = 0;
nframes64_t end = 0;
- if (_editor->session == 0) {
+ if (_editor->session() == 0) {
return;
}
@@ -3059,7 +3059,7 @@ SelectionDrag::motion (GdkEvent* event, bool first_move)
void
SelectionDrag::finished (GdkEvent* event, bool movement_occurred)
{
- Session* s = _editor->session;
+ Session* s = _editor->session();
if (movement_occurred) {
motion (event, false);
@@ -3113,7 +3113,7 @@ RangeMarkerBarDrag::RangeMarkerBarDrag (Editor* e, ArdourCanvas::Item* i, Operat
void
RangeMarkerBarDrag::start_grab (GdkEvent* event, Gdk::Cursor *)
{
- if (_editor->session == 0) {
+ if (_editor->session() == 0) {
return;
}
@@ -3246,8 +3246,8 @@ RangeMarkerBarDrag::finished (GdkEvent* event, bool movement_occurred)
case CreateCDMarker:
{
_editor->begin_reversible_command (_("new range marker"));
- XMLNode &before = _editor->session->locations()->get_state();
- _editor->session->locations()->next_available_name(rangename,"unnamed");
+ XMLNode &before = _editor->session()->locations()->get_state();
+ _editor->session()->locations()->next_available_name(rangename,"unnamed");
if (_operation == CreateCDMarker) {
flags = Location::IsRangeMarker | Location::IsCDMarker;
_editor->cd_marker_bar_drag_rect->hide();
@@ -3257,9 +3257,9 @@ RangeMarkerBarDrag::finished (GdkEvent* event, bool movement_occurred)
_editor->range_bar_drag_rect->hide();
}
newloc = new Location(_editor->temp_location->start(), _editor->temp_location->end(), rangename, (Location::Flags) flags);
- _editor->session->locations()->add (newloc, true);
- XMLNode &after = _editor->session->locations()->get_state();
- _editor->session->add_command(new MementoCommand<Locations>(*(_editor->session->locations()), &before, &after));
+ _editor->session()->locations()->add (newloc, true);
+ XMLNode &after = _editor->session()->locations()->get_state();
+ _editor->session()->add_command(new MementoCommand<Locations>(*(_editor->session()->locations()), &before, &after));
_editor->commit_reversible_command ();
break;
}
@@ -3277,14 +3277,14 @@ RangeMarkerBarDrag::finished (GdkEvent* event, bool movement_occurred)
nframes64_t start;
nframes64_t end;
- _editor->session->locations()->marks_either_side (_grab_frame, start, end);
+ _editor->session()->locations()->marks_either_side (_grab_frame, start, end);
if (end == max_frames) {
- end = _editor->session->current_end_frame ();
+ end = _editor->session()->current_end_frame ();
}
if (start == max_frames) {
- start = _editor->session->current_start_frame ();
+ start = _editor->session()->current_start_frame ();
}
switch (_editor->mouse_mode) {
diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h
index d2593b2463..170c9a8080 100644
--- a/gtk2_ardour/editor_drag.h
+++ b/gtk2_ardour/editor_drag.h
@@ -160,6 +160,7 @@ protected:
private:
void region_going_away (RegionView *);
+ boost::signals2::scoped_connection death_connection;
};
diff --git a/gtk2_ardour/editor_export_audio.cc b/gtk2_ardour/editor_export_audio.cc
index c8d27037a3..7d0fcc1bf9 100644
--- a/gtk2_ardour/editor_export_audio.cc
+++ b/gtk2_ardour/editor_export_audio.cc
@@ -59,7 +59,7 @@ void
Editor::export_audio ()
{
ExportDialog dialog (*this);
- dialog.set_session (session);
+ dialog.set_session (_session);
dialog.run();
}
@@ -67,7 +67,7 @@ void
Editor::export_selection ()
{
ExportSelectionDialog dialog (*this);
- dialog.set_session (session);
+ dialog.set_session (_session);
dialog.run();
}
@@ -86,7 +86,7 @@ Editor::export_range ()
if (((l = find_location_from_marker (marker, is_start)) != 0) && (l->end() > l->start())) {
ExportRangeDialog dialog (*this, l->id().to_s());
- dialog.set_session (session);
+ dialog.set_session (_session);
dialog.run();
}
}
@@ -107,7 +107,7 @@ Editor::export_region ()
AudioTrack & track (dynamic_cast<AudioTrack &> (*rtv.route()));
ExportRegionDialog dialog (*this, region, track);
- dialog.set_session (session);
+ dialog.set_session (_session);
dialog.run();
} catch (std::bad_cast & e) {
@@ -173,7 +173,7 @@ Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
vector<boost::shared_ptr<AudioFileSource> > sources;
uint32_t nchans;
- const string sound_directory = session->session_directory().sound_path().to_string();
+ const string sound_directory = _session->session_directory().sound_path().to_string();
nchans = region->n_channels();
@@ -214,9 +214,9 @@ Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
try {
fs = boost::dynamic_pointer_cast<AudioFileSource> (
- SourceFactory::createWritable (DataType::AUDIO, *session,
+ SourceFactory::createWritable (DataType::AUDIO, *_session,
path, true,
- false, session->frame_rate()));
+ false, _session->frame_rate()));
}
catch (failed_constructor& err) {
@@ -323,7 +323,7 @@ Editor::write_audio_range (AudioPlaylist& playlist, const ChanCount& count, list
string path;
vector<boost::shared_ptr<AudioFileSource> > sources;
- const string sound_directory = session->session_directory().sound_path().to_string();
+ const string sound_directory = _session->session_directory().sound_path().to_string();
uint32_t channels = count.n_audio();
@@ -353,9 +353,9 @@ Editor::write_audio_range (AudioPlaylist& playlist, const ChanCount& count, list
try {
fs = boost::dynamic_pointer_cast<AudioFileSource> (
- SourceFactory::createWritable (DataType::AUDIO, *session,
+ SourceFactory::createWritable (DataType::AUDIO, *_session,
path, true,
- false, session->frame_rate()));
+ false, _session->frame_rate()));
}
catch (failed_constructor& err) {
diff --git a/gtk2_ardour/editor_imageframe.cc b/gtk2_ardour/editor_imageframe.cc
index 3e99f9e6bf..705c68586c 100644
--- a/gtk2_ardour/editor_imageframe.cc
+++ b/gtk2_ardour/editor_imageframe.cc
@@ -1092,14 +1092,14 @@ Editor::handle_new_imageframe_time_axis_view(const string & track_name, void* sr
row[route_display_columns.tv] = iftav;
route_list_display.get_selection()->select (row);
- iftav->GoingAway.connect(sigc::bind(sigc::mem_fun(*this, &Editor::remove_route), (TimeAxisView*)iftav)) ;
+ scoped_connect (iftav->GoingAway, boost::bind (&Editor::remove_route, this, (TimeAxisView*)iftav));
iftav->gui_changed.connect(sigc::mem_fun(*this, &Editor::handle_gui_changes)) ;
}
void
Editor::handle_new_imageframe_marker_time_axis_view(const string & track_name, TimeAxisView* marked_track)
{
- MarkerTimeAxis* mta = new MarkerTimeAxis (*this, *this->current_session(), *track_canvas, track_name, marked_track) ;
+ MarkerTimeAxis* mta = new MarkerTimeAxis (*this, *this->session(), *track_canvas, track_name, marked_track) ;
((ImageFrameTimeAxis*)marked_track)->add_marker_time_axis(mta, this) ;
track_views.push_back(mta) ;
@@ -1109,7 +1109,7 @@ Editor::handle_new_imageframe_marker_time_axis_view(const string & track_name, T
row[route_display_columns.tv] = mta;
route_list_display.get_selection()->select (row);
- mta->GoingAway.connect(sigc::bind(sigc::mem_fun(*this, &Editor::remove_route), (TimeAxisView*)mta)) ;
+ scoped_connect (mta->GoingAway, boost::bind (&Editor::remove_route, this, (TimeAxisView*)mta));
}
diff --git a/gtk2_ardour/editor_keyboard.cc b/gtk2_ardour/editor_keyboard.cc
index ba33e23fea..4b16a4b8a2 100644
--- a/gtk2_ardour/editor_keyboard.cc
+++ b/gtk2_ardour/editor_keyboard.cc
@@ -95,7 +95,7 @@ Editor::kbd_mute_unmute_region ()
(*i)->region()->set_muted (!(*i)->region()->muted ());
XMLNode &after = (*i)->region()->playlist()->get_state ();
- session->add_command (new MementoCommand<ARDOUR::Playlist>(*((*i)->region()->playlist()), &before, &after));
+ _session->add_command (new MementoCommand<ARDOUR::Playlist>(*((*i)->region()->playlist()), &before, &after));
}
@@ -109,7 +109,7 @@ Editor::kbd_mute_unmute_region ()
entered_regionview->region()->set_muted (!entered_regionview->region()->muted());
XMLNode &after = entered_regionview->region()->playlist()->get_state();
- session->add_command (new MementoCommand<ARDOUR::Playlist>(*(entered_regionview->region()->playlist()), &before, &after));
+ _session->add_command (new MementoCommand<ARDOUR::Playlist>(*(entered_regionview->region()->playlist()), &before, &after));
commit_reversible_command();
}
diff --git a/gtk2_ardour/editor_keys.cc b/gtk2_ardour/editor_keys.cc
index b9df06d358..0d46665782 100644
--- a/gtk2_ardour/editor_keys.cc
+++ b/gtk2_ardour/editor_keys.cc
@@ -41,13 +41,13 @@ using namespace PBD;
void
Editor::keyboard_selection_finish (bool add)
{
- if (session && have_pending_keyboard_selection) {
+ if (_session && have_pending_keyboard_selection) {
nframes64_t end;
bool ignored;
- if (session->transport_rolling()) {
- end = session->audible_frame();
+ if (_session->transport_rolling()) {
+ end = _session->audible_frame();
} else {
if (!mouse_frame (end, ignored)) {
return;
@@ -67,9 +67,9 @@ Editor::keyboard_selection_finish (bool add)
void
Editor::keyboard_selection_begin ()
{
- if (session) {
- if (session->transport_rolling()) {
- pending_keyboard_selection_start = session->audible_frame();
+ if (_session) {
+ if (_session->transport_rolling()) {
+ pending_keyboard_selection_start = _session->audible_frame();
have_pending_keyboard_selection = true;
} else {
bool ignored;
diff --git a/gtk2_ardour/editor_locations.cc b/gtk2_ardour/editor_locations.cc
index 7031be410e..d4117b86b0 100644
--- a/gtk2_ardour/editor_locations.cc
+++ b/gtk2_ardour/editor_locations.cc
@@ -32,9 +32,9 @@ EditorLocations::EditorLocations (Editor* e)
}
void
-EditorLocations::connect_to_session (ARDOUR::Session* s)
+EditorLocations::set_session (ARDOUR::Session* s)
{
- EditorComponent::connect_to_session (s);
+ EditorComponent::set_session (s);
locations->set_session (s);
}
diff --git a/gtk2_ardour/editor_locations.h b/gtk2_ardour/editor_locations.h
index 3375b338bd..6d4d3128e4 100644
--- a/gtk2_ardour/editor_locations.h
+++ b/gtk2_ardour/editor_locations.h
@@ -33,7 +33,7 @@ class EditorLocations : public EditorComponent
public:
EditorLocations (Editor *);
- void connect_to_session (ARDOUR::Session *);
+ void set_session (ARDOUR::Session *);
Gtk::Widget& widget ();
diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc
index fa9fd83cc2..4d9828a14d 100644
--- a/gtk2_ardour/editor_markers.cc
+++ b/gtk2_ardour/editor_markers.cc
@@ -332,8 +332,8 @@ Editor::refresh_location_display ()
{
ENSURE_GUI_THREAD (*this, &Editor::refresh_location_display)
- if (session) {
- session->locations()->apply (*this, &Editor::refresh_location_display_internal);
+ if (_session) {
+ _session->locations()->apply (*this, &Editor::refresh_location_display_internal);
}
}
@@ -342,8 +342,8 @@ Editor::refresh_location_display_s (Change ignored)
{
ENSURE_GUI_THREAD (*this, &Editor::refresh_location_display_s, ignored)
- if (session) {
- session->locations()->apply (*this, &Editor::refresh_location_display_internal);
+ if (_session) {
+ _session->locations()->apply (*this, &Editor::refresh_location_display_internal);
}
}
@@ -396,18 +396,18 @@ Editor::mouse_add_new_marker (nframes64_t where, bool is_cd, bool is_xrun)
markerprefix = "mark";
}
- if (session) {
- session->locations()->next_available_name(markername, markerprefix);
+ if (_session) {
+ _session->locations()->next_available_name(markername, markerprefix);
if (!is_xrun && !choose_new_marker_name(markername)) {
return;
}
Location *location = new Location (where, where, markername, (Location::Flags) flags);
- session->begin_reversible_command (_("add marker"));
- XMLNode &before = session->locations()->get_state();
- session->locations()->add (location, true);
- XMLNode &after = session->locations()->get_state();
- session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
- session->commit_reversible_command ();
+ _session->begin_reversible_command (_("add marker"));
+ XMLNode &before = _session->locations()->get_state();
+ _session->locations()->add (location, true);
+ XMLNode &after = _session->locations()->get_state();
+ _session->add_command (new MementoCommand<Locations>(*(_session->locations()), &before, &after));
+ _session->commit_reversible_command ();
/* find the marker we just added */
@@ -436,7 +436,7 @@ Editor::remove_marker (ArdourCanvas::Item& item, GdkEvent*)
Location* loc = find_location_from_marker (marker, is_start);
- if (session && loc) {
+ if (_session && loc) {
Glib::signal_idle().connect (sigc::bind (sigc::mem_fun(*this, &Editor::really_remove_marker), loc));
}
}
@@ -444,12 +444,12 @@ Editor::remove_marker (ArdourCanvas::Item& item, GdkEvent*)
gint
Editor::really_remove_marker (Location* loc)
{
- session->begin_reversible_command (_("remove marker"));
- XMLNode &before = session->locations()->get_state();
- session->locations()->remove (loc);
- XMLNode &after = session->locations()->get_state();
- session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
- session->commit_reversible_command ();
+ _session->begin_reversible_command (_("remove marker"));
+ XMLNode &before = _session->locations()->get_state();
+ _session->locations()->remove (loc);
+ XMLNode &after = _session->locations()->get_state();
+ _session->add_command (new MementoCommand<Locations>(*(_session->locations()), &before, &after));
+ _session->commit_reversible_command ();
return FALSE;
}
@@ -765,15 +765,15 @@ Editor::marker_menu_play_from ()
if ((l = find_location_from_marker (marker, is_start)) != 0) {
if (l->is_mark()) {
- session->request_locate (l->start(), true);
+ _session->request_locate (l->start(), true);
}
else {
- //session->request_bounded_roll (l->start(), l->end());
+ //_session->request_bounded_roll (l->start(), l->end());
if (is_start) {
- session->request_locate (l->start(), true);
+ _session->request_locate (l->start(), true);
} else {
- session->request_locate (l->end(), true);
+ _session->request_locate (l->end(), true);
}
}
}
@@ -795,13 +795,13 @@ Editor::marker_menu_set_playhead ()
if ((l = find_location_from_marker (marker, is_start)) != 0) {
if (l->is_mark()) {
- session->request_locate (l->start(), false);
+ _session->request_locate (l->start(), false);
}
else {
if (is_start) {
- session->request_locate (l->start(), false);
+ _session->request_locate (l->start(), false);
} else {
- session->request_locate (l->end(), false);
+ _session->request_locate (l->end(), false);
}
}
}
@@ -811,7 +811,7 @@ void
Editor::marker_menu_range_to_next ()
{
Marker* marker;
- if (!session) {
+ if (!_session) {
return;
}
@@ -829,14 +829,14 @@ Editor::marker_menu_range_to_next ()
nframes64_t start;
nframes64_t end;
- session->locations()->marks_either_side (marker->position(), start, end);
+ _session->locations()->marks_either_side (marker->position(), start, end);
if (end != max_frames) {
string range_name = l->name();
range_name += "-range";
Location* newrange = new Location (marker->position(), end, range_name, Location::IsRangeMarker);
- session->locations()->add (newrange);
+ _session->locations()->add (newrange);
}
}
@@ -856,13 +856,13 @@ Editor::marker_menu_set_from_playhead ()
if ((l = find_location_from_marker (marker, is_start)) != 0) {
if (l->is_mark()) {
- l->set_start (session->audible_frame ());
+ l->set_start (_session->audible_frame ());
}
else {
if (is_start) {
- l->set_start (session->audible_frame ());
+ l->set_start (_session->audible_frame ());
} else {
- l->set_end (session->audible_frame ());
+ l->set_end (_session->audible_frame ());
}
}
}
@@ -923,10 +923,10 @@ Editor::marker_menu_play_range ()
if ((l = find_location_from_marker (marker, is_start)) != 0) {
if (l->is_mark()) {
- session->request_locate (l->start(), true);
+ _session->request_locate (l->start(), true);
}
else {
- session->request_bounded_roll (l->start(), l->end());
+ _session->request_bounded_roll (l->start(), l->end());
}
}
@@ -951,8 +951,8 @@ Editor::marker_menu_loop_range ()
l2->set (l->start(), l->end());
// enable looping, reposition and start rolling
- session->request_play_loop(true);
- session->request_locate (l2->start(), true);
+ _session->request_play_loop(true);
+ _session->request_locate (l2->start(), true);
}
}
}
@@ -1072,13 +1072,13 @@ Editor::marker_menu_rename ()
}
begin_reversible_command ( _("rename marker") );
- XMLNode &before = session->locations()->get_state();
+ XMLNode &before = _session->locations()->get_state();
dialog.get_result(txt);
loc->set_name (txt);
- XMLNode &after = session->locations()->get_state();
- session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
+ XMLNode &after = _session->locations()->get_state();
+ _session->add_command (new MementoCommand<Locations>(*(_session->locations()), &before, &after));
commit_reversible_command ();
}
@@ -1106,13 +1106,13 @@ Editor::new_transport_marker_menu_set_punch ()
void
Editor::update_loop_range_view (bool visibility)
{
- if (session == 0) {
+ if (_session == 0) {
return;
}
Location* tll;
- if (session->get_play_loop() && ((tll = transport_loop_location()) != 0)) {
+ if (_session->get_play_loop() && ((tll = transport_loop_location()) != 0)) {
double x1 = frame_to_pixel (tll->start());
double x2 = frame_to_pixel (tll->end());
@@ -1132,21 +1132,21 @@ Editor::update_loop_range_view (bool visibility)
void
Editor::update_punch_range_view (bool visibility)
{
- if (session == 0) {
+ if (_session == 0) {
return;
}
Location* tpl;
- if ((session->config.get_punch_in() || session->config.get_punch_out()) && ((tpl = transport_punch_location()) != 0)) {
+ if ((_session->config.get_punch_in() || _session->config.get_punch_out()) && ((tpl = transport_punch_location()) != 0)) {
guint track_canvas_width,track_canvas_height;
track_canvas->get_size(track_canvas_width,track_canvas_height);
- if (session->config.get_punch_in()) {
+ if (_session->config.get_punch_in()) {
transport_punch_range_rect->property_x1() = frame_to_pixel (tpl->start());
- transport_punch_range_rect->property_x2() = (session->config.get_punch_out() ? frame_to_pixel (tpl->end()) : frame_to_pixel (JACK_MAX_FRAMES));
+ transport_punch_range_rect->property_x2() = (_session->config.get_punch_out() ? frame_to_pixel (tpl->end()) : frame_to_pixel (JACK_MAX_FRAMES));
} else {
transport_punch_range_rect->property_x1() = 0;
- transport_punch_range_rect->property_x2() = (session->config.get_punch_out() ? frame_to_pixel (tpl->end()) : track_canvas_width);
+ transport_punch_range_rect->property_x2() = (_session->config.get_punch_out() ? frame_to_pixel (tpl->end()) : track_canvas_width);
}
if (visibility) {
@@ -1160,7 +1160,7 @@ Editor::update_punch_range_view (bool visibility)
void
Editor::marker_selection_changed ()
{
- if (session && session->deletion_in_progress()) {
+ if (_session && _session->deletion_in_progress()) {
return;
}
@@ -1191,10 +1191,10 @@ struct SortLocationsByPosition {
void
Editor::goto_nth_marker (int n)
{
- if (!session) {
+ if (!_session) {
return;
}
- const Locations::LocationList& l (session->locations()->list());
+ const Locations::LocationList& l (_session->locations()->list());
Locations::LocationList ordered;
ordered = l;
@@ -1204,7 +1204,7 @@ Editor::goto_nth_marker (int n)
for (Locations::LocationList::iterator i = ordered.begin(); n >= 0 && i != ordered.end(); ++i) {
if ((*i)->is_mark() && !(*i)->is_hidden() && !(*i)->is_start()) {
if (n == 0) {
- session->request_locate ((*i)->start(), session->transport_rolling());
+ _session->request_locate ((*i)->start(), _session->transport_rolling());
break;
}
--n;
diff --git a/gtk2_ardour/editor_mixer.cc b/gtk2_ardour/editor_mixer.cc
index 03346dffbc..9decef5a21 100644
--- a/gtk2_ardour/editor_mixer.cc
+++ b/gtk2_ardour/editor_mixer.cc
@@ -75,7 +75,7 @@ Editor::show_editor_mixer (bool yn)
show_editor_mixer_when_tracks_arrive = false;
- if (!session) {
+ if (!_session) {
show_editor_mixer_when_tracks_arrive = yn;
return;
}
@@ -165,10 +165,10 @@ void
Editor::create_editor_mixer ()
{
current_mixer_strip = new MixerStrip (*ARDOUR_UI::instance()->the_mixer(),
- *session,
+ _session,
false);
current_mixer_strip->Hiding.connect (sigc::mem_fun(*this, &Editor::current_mixer_strip_hidden));
- current_mixer_strip->GoingAway.connect (sigc::mem_fun(*this, &Editor::current_mixer_strip_removed));
+ scoped_connect (current_mixer_strip->GoingAway, boost::bind (&Editor::current_mixer_strip_removed, this));
#ifdef GTKOSX
current_mixer_strip->WidthChanged.connect (sigc::mem_fun(*this, &Editor::ensure_all_elements_drawn));
#endif
@@ -180,7 +180,7 @@ Editor::set_selected_mixer_strip (TimeAxisView& view)
{
RouteTimeAxisView* at;
- if (!session || (at = dynamic_cast<RouteTimeAxisView*>(&view)) == 0) {
+ if (!_session || (at = dynamic_cast<RouteTimeAxisView*>(&view)) == 0) {
return;
}
@@ -221,9 +221,9 @@ Editor::update_current_screen ()
return;
}
- if (session && session->engine().running()) {
+ if (_session && _session->engine().running()) {
- nframes64_t const frame = session->audible_frame();
+ nframes64_t const frame = _session->audible_frame();
if (_dragging_playhead) {
goto almost_done;
@@ -231,7 +231,7 @@ Editor::update_current_screen ()
/* only update if the playhead is on screen or we are following it */
- if (_follow_playhead && session->requested_return_frame() < 0) {
+ if (_follow_playhead && _session->requested_return_frame() < 0) {
//playhead_cursor->canvas_item.show();
@@ -242,7 +242,7 @@ Editor::update_current_screen ()
#ifndef CONTINUOUS_SCROLL
if (frame < leftmost_frame || frame > leftmost_frame + current_page_frames()) {
- if (session->transport_speed() < 0) {
+ if (_session->transport_speed() < 0) {
if (frame > (current_page_frames()/2)) {
center_screen (frame-(current_page_frames()/2));
} else {
@@ -261,7 +261,7 @@ Editor::update_current_screen ()
editor canvas
*/
- if (session->transport_speed()) {
+ if (_session->transport_speed()) {
double target = ((double)frame - (double)current_page_frames()/2.0) / frames_per_unit;
if (target <= 0.0) target = 0.0;
if ( fabs(target - current) < current_page_frames()/frames_per_unit ) {
@@ -331,9 +331,7 @@ Editor::session_going_away ()
{
_have_idled = false;
- for (vector<sigc::connection>::iterator i = session_connections.begin(); i != session_connections.end(); ++i) {
- (*i).disconnect ();
- }
+ _session_connections.drop_connections ();
stop_scrolling ();
selection->clear ();
@@ -389,7 +387,7 @@ Editor::session_going_away ()
set_title (title.get_string());
- session = 0;
+ SessionHandlePtr::session_going_away ();
}
void
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index cecddd092a..4fb7271c47 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -970,7 +970,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
track_canvas->grab_focus();
- if (session && session->actively_recording()) {
+ if (_session && _session->actively_recording()) {
return true;
}
@@ -1013,7 +1013,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
/* no action if we're recording */
- if (session && session->actively_recording()) {
+ if (_session && _session->actively_recording()) {
return true;
}
@@ -1291,7 +1291,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
}
} else {
/* make sure we stop */
- session->request_transport_speed (0.0);
+ _session->request_transport_speed (0.0);
}
break;
@@ -1681,8 +1681,8 @@ Editor::scrub ()
if (scrubbing_direction == 0) {
/* first move */
- session->request_locate (_drag->current_pointer_frame(), false);
- session->request_transport_speed (0.1);
+ _session->request_locate (_drag->current_pointer_frame(), false);
+ _session->request_transport_speed (0.1);
scrubbing_direction = 1;
} else {
@@ -1706,7 +1706,7 @@ Editor::scrub ()
scrub_reverse_distance = 0;
delta = 0.01 * (last_scrub_x - _drag->current_pointer_x());
- session->request_transport_speed (session->transport_speed() - delta);
+ _session->request_transport_speed (_session->transport_speed() - delta);
}
} else {
@@ -1725,7 +1725,7 @@ Editor::scrub ()
scrub_reverse_distance = 0;
delta = 0.01 * (_drag->current_pointer_x() - last_scrub_x);
- session->request_transport_speed (session->transport_speed() + delta);
+ _session->request_transport_speed (_session->transport_speed() + delta);
}
}
@@ -1737,11 +1737,11 @@ Editor::scrub ()
if (scrubbing_direction > 0) {
/* was forwards, go backwards */
- session->request_transport_speed (-0.1);
+ _session->request_transport_speed (-0.1);
scrubbing_direction = -1;
} else {
/* was backwards, go forwards */
- session->request_transport_speed (0.1);
+ _session->request_transport_speed (0.1);
scrubbing_direction = 1;
}
@@ -1777,7 +1777,7 @@ Editor::motion_handler (ArdourCanvas::Item* /*item*/, GdkEvent* event, bool from
step_timeout.disconnect ();
}
- if (session && session->actively_recording()) {
+ if (_session && _session->actively_recording()) {
/* Sorry. no dragging stuff around while we record */
return true;
}
@@ -1917,7 +1917,7 @@ Editor::show_verbose_time_cursor (nframes64_t frame, double offset, double xpos,
nframes64_t frame_rate;
float secs;
- if (session == 0) {
+ if (_session == 0) {
return;
}
@@ -1931,18 +1931,18 @@ Editor::show_verbose_time_cursor (nframes64_t frame, double offset, double xpos,
switch (m) {
case AudioClock::BBT:
- session->bbt_time (frame, bbt);
+ _session->bbt_time (frame, bbt);
snprintf (buf, sizeof (buf), "%02" PRIu32 "|%02" PRIu32 "|%02" PRIu32, bbt.bars, bbt.beats, bbt.ticks);
break;
case AudioClock::Timecode:
- session->timecode_time (frame, timecode);
+ _session->timecode_time (frame, timecode);
snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%02" PRId32 ":%02" PRId32, timecode.hours, timecode.minutes, timecode.seconds, timecode.frames);
break;
case AudioClock::MinSec:
/* XXX this is copied from show_verbose_duration_cursor() */
- frame_rate = session->frame_rate();
+ frame_rate = _session->frame_rate();
hours = frame / (frame_rate * 3600);
frame = frame % (frame_rate * 3600);
mins = frame / (frame_rate * 60);
@@ -1974,9 +1974,9 @@ Editor::show_verbose_duration_cursor (nframes64_t start, nframes64_t end, double
int hours, mins;
nframes64_t distance, frame_rate;
float secs;
- Meter meter_at_start(session->tempo_map().meter_at(start));
+ Meter meter_at_start(_session->tempo_map().meter_at(start));
- if (session == 0) {
+ if (_session == 0) {
return;
}
@@ -1990,8 +1990,8 @@ Editor::show_verbose_duration_cursor (nframes64_t start, nframes64_t end, double
switch (m) {
case AudioClock::BBT:
- session->bbt_time (start, sbbt);
- session->bbt_time (end, ebbt);
+ _session->bbt_time (start, sbbt);
+ _session->bbt_time (end, ebbt);
/* subtract */
/* XXX this computation won't work well if the
@@ -2016,14 +2016,14 @@ Editor::show_verbose_duration_cursor (nframes64_t start, nframes64_t end, double
break;
case AudioClock::Timecode:
- session->timecode_duration (end - start, timecode);
+ _session->timecode_duration (end - start, timecode);
snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%02" PRId32 ":%02" PRId32, timecode.hours, timecode.minutes, timecode.seconds, timecode.frames);
break;
case AudioClock::MinSec:
/* XXX this stuff should be elsewhere.. */
distance = end - start;
- frame_rate = session->frame_rate();
+ frame_rate = _session->frame_rate();
hours = distance / (frame_rate * 3600);
distance = distance % (frame_rate * 3600);
mins = distance / (frame_rate * 60);
@@ -2255,7 +2255,7 @@ Editor::point_trim (GdkEvent* event)
(*i)->region()->trim_front (new_bound, this);
XMLNode &after = pl->get_state();
- session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
}
}
@@ -2265,7 +2265,7 @@ Editor::point_trim (GdkEvent* event)
XMLNode &before = pl->get_state();
rv->region()->trim_front (new_bound, this);
XMLNode &after = pl->get_state();
- session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
}
}
@@ -2284,7 +2284,7 @@ Editor::point_trim (GdkEvent* event)
XMLNode &before = pl->get_state();
(*i)->region()->trim_end (new_bound, this);
XMLNode &after = pl->get_state();
- session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
}
}
@@ -2295,7 +2295,7 @@ Editor::point_trim (GdkEvent* event)
XMLNode &before = pl->get_state();
rv->region()->trim_end (new_bound, this);
XMLNode &after = pl->get_state();
- session->add_command (new MementoCommand<Playlist>(*pl.get(), &before, &after));
+ _session->add_command (new MementoCommand<Playlist>(*pl.get(), &before, &after));
}
}
@@ -2418,7 +2418,7 @@ Editor::mouse_brush_insert_region (RegionView* rv, nframes64_t pos)
XMLNode &before = playlist->get_state();
playlist->add_region (RegionFactory::create (rv->region()), (nframes64_t) (pos * speed));
XMLNode &after = playlist->get_state();
- session->add_command(new MementoCommand<Playlist>(*playlist.get(), &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*playlist.get(), &before, &after));
// playlist is frozen, so we have to update manually
@@ -2534,7 +2534,7 @@ Editor::start_selection_grab (ArdourCanvas::Item* /*item*/, GdkEvent* event)
XMLNode *before = &(playlist->get_state());
clicked_routeview->playlist()->add_region (region, selection->time[clicked_selection].start);
XMLNode *after = &(playlist->get_state());
- session->add_command(new MementoCommand<Playlist>(*playlist, before, after));
+ _session->add_command(new MementoCommand<Playlist>(*playlist, before, after));
commit_reversible_command ();
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 4ed0354491..2e5556352c 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -96,16 +96,16 @@ using Gtkmm2ext::Keyboard;
void
Editor::undo (uint32_t n)
{
- if (session) {
- session->undo (n);
+ if (_session) {
+ _session->undo (n);
}
}
void
Editor::redo (uint32_t n)
{
- if (session) {
- session->redo (n);
+ if (_session) {
+ _session->redo (n);
}
}
@@ -171,7 +171,7 @@ Editor::split_regions_at (nframes64_t where, RegionSelection& regions)
XMLNode &before = pl->get_state();
pl->split_region ((*a)->region(), where);
XMLNode &after = pl->get_state();
- session->add_command(new MementoCommand<Playlist>(*pl, &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*pl, &before, &after));
}
a = tmp;
@@ -308,7 +308,7 @@ Editor::nudge_forward (bool next, bool force_playhead)
get_regions_for_action (rs);
- if (!session) return;
+ if (!_session) return;
if (!force_playhead && !rs.empty()) {
@@ -326,7 +326,7 @@ Editor::nudge_forward (bool next, bool force_playhead)
XMLNode &before = r->playlist()->get_state();
r->set_position (r->position() + distance, this);
XMLNode &after = r->playlist()->get_state();
- session->add_command (new MementoCommand<Playlist>(*(r->playlist()), &before, &after));
+ _session->add_command (new MementoCommand<Playlist>(*(r->playlist()), &before, &after));
}
commit_reversible_command ();
@@ -368,7 +368,7 @@ Editor::nudge_forward (bool next, bool force_playhead)
}
}
XMLNode& after (loc->get_state());
- session->add_command (new MementoCommand<Location>(*loc, &before, &after));
+ _session->add_command (new MementoCommand<Location>(*loc, &before, &after));
}
}
@@ -376,7 +376,7 @@ Editor::nudge_forward (bool next, bool force_playhead)
} else {
distance = get_nudge_distance (playhead_cursor->current_frame, next_distance);
- session->request_locate (playhead_cursor->current_frame + distance);
+ _session->request_locate (playhead_cursor->current_frame + distance);
}
}
@@ -389,7 +389,7 @@ Editor::nudge_backward (bool next, bool force_playhead)
get_regions_for_action (rs);
- if (!session) return;
+ if (!_session) return;
if (!force_playhead && !rs.empty()) {
@@ -412,7 +412,7 @@ Editor::nudge_backward (bool next, bool force_playhead)
r->set_position (0, this);
}
XMLNode &after = r->playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(r->playlist()), &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*(r->playlist()), &before, &after));
}
commit_reversible_command ();
@@ -456,7 +456,7 @@ Editor::nudge_backward (bool next, bool force_playhead)
}
XMLNode& after (loc->get_state());
- session->add_command (new MementoCommand<Location>(*loc, &before, &after));
+ _session->add_command (new MementoCommand<Location>(*loc, &before, &after));
}
}
@@ -467,9 +467,9 @@ Editor::nudge_backward (bool next, bool force_playhead)
distance = get_nudge_distance (playhead_cursor->current_frame, next_distance);
if (playhead_cursor->current_frame > distance) {
- session->request_locate (playhead_cursor->current_frame - distance);
+ _session->request_locate (playhead_cursor->current_frame - distance);
} else {
- session->goto_start();
+ _session->goto_start();
}
}
}
@@ -482,13 +482,13 @@ Editor::nudge_forward_capture_offset ()
get_regions_for_action (rs);
- if (!session) return;
+ if (!_session) return;
if (!rs.empty()) {
begin_reversible_command (_("nudge forward"));
- distance = session->worst_output_latency();
+ distance = _session->worst_output_latency();
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
boost::shared_ptr<Region> r ((*i)->region());
@@ -496,7 +496,7 @@ Editor::nudge_forward_capture_offset ()
XMLNode &before = r->playlist()->get_state();
r->set_position (r->position() + distance, this);
XMLNode &after = r->playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(r->playlist()), &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*(r->playlist()), &before, &after));
}
commit_reversible_command ();
@@ -512,13 +512,13 @@ Editor::nudge_backward_capture_offset ()
get_regions_for_action (rs);
- if (!session) return;
+ if (!_session) return;
if (!rs.empty()) {
begin_reversible_command (_("nudge forward"));
- distance = session->worst_output_latency();
+ distance = _session->worst_output_latency();
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
boost::shared_ptr<Region> r ((*i)->region());
@@ -531,7 +531,7 @@ Editor::nudge_backward_capture_offset ()
r->set_position (0, this);
}
XMLNode &after = r->playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(r->playlist()), &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*(r->playlist()), &before, &after));
}
commit_reversible_command ();
@@ -543,14 +543,14 @@ Editor::nudge_backward_capture_offset ()
void
Editor::move_to_start ()
{
- session->goto_start ();
+ _session->goto_start ();
}
void
Editor::move_to_end ()
{
- session->request_locate (session->current_end_frame());
+ _session->request_locate (_session->current_end_frame());
}
void
@@ -564,7 +564,7 @@ Editor::build_region_boundary_cache ()
region_boundary_cache.clear ();
- if (session == 0) {
+ if (_session == 0) {
return;
}
@@ -597,7 +597,7 @@ Editor::build_region_boundary_cache ()
tlist = track_views;
}
- while (pos < session->current_end_frame() && !at_end) {
+ while (pos < _session->current_end_frame() && !at_end) {
nframes64_t rpos;
nframes64_t lpos = max_frames;
@@ -714,7 +714,7 @@ Editor::find_next_region (nframes64_t frame, RegionPoint point, int32_t dir, Tra
break;
}
- // rpos is a "track frame", converting it to "session frame"
+ // rpos is a "track frame", converting it to "_session frame"
rpos = track_frame_to_session_frame(rpos, track_speed);
if (rpos > frame) {
@@ -807,7 +807,7 @@ Editor::cursor_to_region_boundary (bool with_selection, int32_t dir)
nframes64_t pos = playhead_cursor->current_frame;
nframes64_t target;
- if (!session) {
+ if (!_session) {
return;
}
@@ -821,7 +821,7 @@ Editor::cursor_to_region_boundary (bool with_selection, int32_t dir)
}
- session->request_locate (target);
+ _session->request_locate (target);
}
void
@@ -842,7 +842,7 @@ Editor::cursor_to_region_point (EditorCursor* cursor, RegionPoint point, int32_t
boost::shared_ptr<Region> r;
nframes64_t pos = cursor->current_frame;
- if (!session) {
+ if (!_session) {
return;
}
@@ -899,7 +899,7 @@ Editor::cursor_to_region_point (EditorCursor* cursor, RegionPoint point, int32_t
pos = track_frame_to_session_frame(pos, speed);
if (cursor == playhead_cursor) {
- session->request_locate (pos);
+ _session->request_locate (pos);
} else {
cursor->set_position (pos);
}
@@ -943,7 +943,7 @@ Editor::cursor_to_selection_start (EditorCursor *cursor)
}
if (cursor == playhead_cursor) {
- session->request_locate (pos);
+ _session->request_locate (pos);
} else {
cursor->set_position (pos);
}
@@ -975,7 +975,7 @@ Editor::cursor_to_selection_end (EditorCursor *cursor)
}
if (cursor == playhead_cursor) {
- session->request_locate (pos);
+ _session->request_locate (pos);
} else {
cursor->set_position (pos);
}
@@ -988,7 +988,7 @@ Editor::selected_marker_to_region_boundary (bool with_selection, int32_t dir)
Location* loc;
bool ignored;
- if (!session) {
+ if (!_session) {
return;
}
@@ -1041,7 +1041,7 @@ Editor::selected_marker_to_region_point (RegionPoint point, int32_t dir)
Location* loc;
bool ignored;
- if (!session || selection->markers.empty()) {
+ if (!_session || selection->markers.empty()) {
return;
}
@@ -1117,7 +1117,7 @@ Editor::selected_marker_to_selection_start ()
Location* loc;
bool ignored;
- if (!session || selection->markers.empty()) {
+ if (!_session || selection->markers.empty()) {
return;
}
@@ -1156,7 +1156,7 @@ Editor::selected_marker_to_selection_end ()
Location* loc;
bool ignored;
- if (!session || selection->markers.empty()) {
+ if (!_session || selection->markers.empty()) {
return;
}
@@ -1218,7 +1218,7 @@ Editor::scroll_playhead (bool forward)
}
}
- session->request_locate (pos);
+ _session->request_locate (pos);
}
void
@@ -1233,7 +1233,7 @@ Editor::playhead_backward ()
cnt = 1;
} else {
if (was_floating) {
- cnt = (nframes64_t) floor (prefix * session->frame_rate ());
+ cnt = (nframes64_t) floor (prefix * _session->frame_rate ());
} else {
cnt = (nframes64_t) prefix;
}
@@ -1252,7 +1252,7 @@ Editor::playhead_backward ()
reload, just to move 1 sample !!!
*/
- session->request_locate (pos);
+ _session->request_locate (pos);
}
void
@@ -1267,7 +1267,7 @@ Editor::playhead_forward ()
cnt = 1;
} else {
if (was_floating) {
- cnt = (nframes64_t) floor (prefix * session->frame_rate ());
+ cnt = (nframes64_t) floor (prefix * _session->frame_rate ());
} else {
cnt = (nframes64_t) floor (prefix);
}
@@ -1280,13 +1280,13 @@ Editor::playhead_forward ()
reload, just to move 1 sample !!!
*/
- session->request_locate (pos+cnt);
+ _session->request_locate (pos+cnt);
}
void
Editor::cursor_align (bool playhead_to_edit)
{
- if (!session) {
+ if (!_session) {
return;
}
@@ -1296,7 +1296,7 @@ Editor::cursor_align (bool playhead_to_edit)
return;
}
- session->request_locate (selection->markers.front()->position(), session->transport_rolling());
+ _session->request_locate (selection->markers.front()->position(), _session->transport_rolling());
} else {
/* move selected markers to playhead */
@@ -1328,7 +1328,7 @@ Editor::edit_cursor_backward ()
cnt = 1;
} else {
if (was_floating) {
- cnt = (nframes64_t) floor (prefix * session->frame_rate ());
+ cnt = (nframes64_t) floor (prefix * _session->frame_rate ());
} else {
cnt = (nframes64_t) prefix;
}
@@ -1359,7 +1359,7 @@ Editor::edit_cursor_forward ()
cnt = 1;
} else {
if (was_floating) {
- cnt = (nframes64_t) floor (prefix * session->frame_rate ());
+ cnt = (nframes64_t) floor (prefix * _session->frame_rate ());
} else {
cnt = (nframes64_t) floor (prefix);
}
@@ -1381,12 +1381,12 @@ Editor::goto_frame ()
}
if (was_floating) {
- frame = (nframes64_t) floor (prefix * session->frame_rate());
+ frame = (nframes64_t) floor (prefix * _session->frame_rate());
} else {
frame = (nframes64_t) floor (prefix);
}
- session->request_locate (frame);
+ _session->request_locate (frame);
}
void
@@ -1402,7 +1402,7 @@ Editor::scroll_backward (float pages)
cnt = (nframes64_t) floor (pages * one_page);
} else {
if (was_floating) {
- cnt = (nframes64_t) floor (prefix * session->frame_rate());
+ cnt = (nframes64_t) floor (prefix * _session->frame_rate());
} else {
cnt = (nframes64_t) floor (prefix * one_page);
}
@@ -1430,7 +1430,7 @@ Editor::scroll_forward (float pages)
cnt = (nframes64_t) floor (pages * one_page);
} else {
if (was_floating) {
- cnt = (nframes64_t) floor (prefix * session->frame_rate());
+ cnt = (nframes64_t) floor (prefix * _session->frame_rate());
} else {
cnt = (nframes64_t) floor (prefix * one_page);
}
@@ -1538,7 +1538,7 @@ Editor::temporal_zoom_step (bool coarser)
void
Editor::temporal_zoom (gdouble fpu)
{
- if (!session) return;
+ if (!_session) return;
nframes64_t current_page = current_page_frames();
nframes64_t current_leftmost = leftmost_frame;
@@ -1654,7 +1654,7 @@ Editor::temporal_zoom (gdouble fpu)
}
- // leftmost_after_zoom = min (leftmost_after_zoom, session->current_end_frame());
+ // leftmost_after_zoom = min (leftmost_after_zoom, _session->current_end_frame());
reposition_and_zoom (leftmost_after_zoom, nfpu);
}
@@ -1782,15 +1782,15 @@ Editor::temporal_zoom_session ()
{
ENSURE_GUI_THREAD (*this, &Editor::temporal_zoom_session)
- if (session) {
- temporal_zoom_by_frame (session->current_start_frame(), session->current_end_frame(), "zoom to session");
+ if (_session) {
+ temporal_zoom_by_frame (_session->current_start_frame(), _session->current_end_frame(), "zoom to _session");
}
}
void
Editor::temporal_zoom_by_frame (nframes64_t start, nframes64_t end, const string & /*op*/)
{
- if (!session) return;
+ if (!_session) return;
if ((start == 0 && end == 0) || end < start) {
return;
@@ -1814,7 +1814,7 @@ Editor::temporal_zoom_by_frame (nframes64_t start, nframes64_t end, const string
void
Editor::temporal_zoom_to_frame (bool coarser, nframes64_t frame)
{
- if (!session) {
+ if (!_session) {
return;
}
double range_before = frame - leftmost_frame;
@@ -1840,8 +1840,8 @@ Editor::temporal_zoom_to_frame (bool coarser, nframes64_t frame)
new_leftmost = 0;
}
// begin_reversible_command (_("zoom to frame"));
-// session->add_undo (sigc::bind (sigc::mem_fun(*this, &Editor::reposition_and_zoom), leftmost_frame, frames_per_unit));
-// session->add_redo (sigc::bind (sigc::mem_fun(*this, &Editor::reposition_and_zoom), new_leftmost, new_fpu));
+// _session->add_undo (sigc::bind (sigc::mem_fun(*this, &Editor::reposition_and_zoom), leftmost_frame, frames_per_unit));
+// _session->add_redo (sigc::bind (sigc::mem_fun(*this, &Editor::reposition_and_zoom), new_leftmost, new_fpu));
// commit_reversible_command ();
reposition_and_zoom (new_leftmost, new_fpu);
@@ -1893,22 +1893,22 @@ Editor::add_location_from_selection ()
return;
}
- if (session == 0 || clicked_axisview == 0) {
+ if (_session == 0 || clicked_axisview == 0) {
return;
}
nframes64_t start = selection->time[clicked_selection].start;
nframes64_t end = selection->time[clicked_selection].end;
- session->locations()->next_available_name(rangename,"selection");
+ _session->locations()->next_available_name(rangename,"selection");
Location *location = new Location (start, end, rangename, Location::IsRangeMarker);
- session->begin_reversible_command (_("add marker"));
- XMLNode &before = session->locations()->get_state();
- session->locations()->add (location, true);
- XMLNode &after = session->locations()->get_state();
- session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
- session->commit_reversible_command ();
+ _session->begin_reversible_command (_("add marker"));
+ XMLNode &before = _session->locations()->get_state();
+ _session->locations()->add (location, true);
+ XMLNode &after = _session->locations()->get_state();
+ _session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after));
+ _session->commit_reversible_command ();
}
void
@@ -1918,23 +1918,23 @@ Editor::add_location_mark (nframes64_t where)
select_new_marker = true;
- session->locations()->next_available_name(markername,"mark");
+ _session->locations()->next_available_name(markername,"mark");
if (!choose_new_marker_name(markername)) {
return;
}
Location *location = new Location (where, where, markername, Location::IsMark);
- session->begin_reversible_command (_("add marker"));
- XMLNode &before = session->locations()->get_state();
- session->locations()->add (location, true);
- XMLNode &after = session->locations()->get_state();
- session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
- session->commit_reversible_command ();
+ _session->begin_reversible_command (_("add marker"));
+ XMLNode &before = _session->locations()->get_state();
+ _session->locations()->add (location, true);
+ XMLNode &after = _session->locations()->get_state();
+ _session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after));
+ _session->commit_reversible_command ();
}
void
Editor::add_location_from_playhead_cursor ()
{
- add_location_mark (session->audible_frame());
+ add_location_mark (_session->audible_frame());
}
void
@@ -1948,8 +1948,8 @@ Editor::add_locations_from_audio_region ()
return;
}
- session->begin_reversible_command (rs.size () > 1 ? _("add markers") : _("add marker"));
- XMLNode &before = session->locations()->get_state();
+ _session->begin_reversible_command (rs.size () > 1 ? _("add markers") : _("add marker"));
+ XMLNode &before = _session->locations()->get_state();
cerr << "Add locations\n";
@@ -1959,12 +1959,12 @@ Editor::add_locations_from_audio_region ()
Location *location = new Location (region->position(), region->last_frame(), region->name(), Location::IsRangeMarker);
- session->locations()->add (location, true);
+ _session->locations()->add (location, true);
}
- XMLNode &after = session->locations()->get_state();
- session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
- session->commit_reversible_command ();
+ XMLNode &after = _session->locations()->get_state();
+ _session->add_command (new MementoCommand<Locations>(*(_session->locations()), &before, &after));
+ _session->commit_reversible_command ();
}
void
@@ -1978,13 +1978,13 @@ Editor::add_location_from_audio_region ()
return;
}
- session->begin_reversible_command (_("add marker"));
- XMLNode &before = session->locations()->get_state();
+ _session->begin_reversible_command (_("add marker"));
+ XMLNode &before = _session->locations()->get_state();
string markername;
if (rs.size() > 1) { // more than one region selected
- session->locations()->next_available_name(markername, "regions");
+ _session->locations()->next_available_name(markername, "regions");
} else {
RegionView* rv = *(rs.begin());
boost::shared_ptr<Region> region = rv->region();
@@ -1999,11 +1999,11 @@ Editor::add_location_from_audio_region ()
// single range spanning all selected
Location *location = new Location (rs.start(), rs.end_frame(), markername, Location::IsRangeMarker);
- session->locations()->add (location, true);
+ _session->locations()->add (location, true);
- XMLNode &after = session->locations()->get_state();
- session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
- session->commit_reversible_command ();
+ XMLNode &after = _session->locations()->get_state();
+ _session->add_command (new MementoCommand<Locations>(*(_session->locations()), &before, &after));
+ _session->commit_reversible_command ();
}
void
@@ -2064,32 +2064,32 @@ Editor::search_forwards ()
void
Editor::jump_forward_to_mark ()
{
- if (!session) {
+ if (!_session) {
return;
}
- Location *location = session->locations()->first_location_after (playhead_cursor->current_frame);
+ Location *location = _session->locations()->first_location_after (playhead_cursor->current_frame);
if (location) {
- session->request_locate (location->start(), session->transport_rolling());
+ _session->request_locate (location->start(), _session->transport_rolling());
} else {
- session->request_locate (session->current_end_frame());
+ _session->request_locate (_session->current_end_frame());
}
}
void
Editor::jump_backward_to_mark ()
{
- if (!session) {
+ if (!_session) {
return;
}
- Location *location = session->locations()->first_location_before (playhead_cursor->current_frame);
+ Location *location = _session->locations()->first_location_before (playhead_cursor->current_frame);
if (location) {
- session->request_locate (location->start(), session->transport_rolling());
+ _session->request_locate (location->start(), _session->transport_rolling());
} else {
- session->goto_start ();
+ _session->goto_start ();
}
}
@@ -2102,66 +2102,66 @@ Editor::set_mark ()
string markername;
if (get_prefix (prefix, was_floating)) {
- pos = session->audible_frame ();
+ pos = _session->audible_frame ();
} else {
if (was_floating) {
- pos = (nframes64_t) floor (prefix * session->frame_rate ());
+ pos = (nframes64_t) floor (prefix * _session->frame_rate ());
} else {
pos = (nframes64_t) floor (prefix);
}
}
- session->locations()->next_available_name(markername,"mark");
+ _session->locations()->next_available_name(markername,"mark");
if (!choose_new_marker_name(markername)) {
return;
}
- session->locations()->add (new Location (pos, 0, markername, Location::IsMark), true);
+ _session->locations()->add (new Location (pos, 0, markername, Location::IsMark), true);
}
void
Editor::clear_markers ()
{
- if (session) {
- session->begin_reversible_command (_("clear markers"));
- XMLNode &before = session->locations()->get_state();
- session->locations()->clear_markers ();
- XMLNode &after = session->locations()->get_state();
- session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
- session->commit_reversible_command ();
+ if (_session) {
+ _session->begin_reversible_command (_("clear markers"));
+ XMLNode &before = _session->locations()->get_state();
+ _session->locations()->clear_markers ();
+ XMLNode &after = _session->locations()->get_state();
+ _session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after));
+ _session->commit_reversible_command ();
}
}
void
Editor::clear_ranges ()
{
- if (session) {
- session->begin_reversible_command (_("clear ranges"));
- XMLNode &before = session->locations()->get_state();
+ if (_session) {
+ _session->begin_reversible_command (_("clear ranges"));
+ XMLNode &before = _session->locations()->get_state();
- Location * looploc = session->locations()->auto_loop_location();
- Location * punchloc = session->locations()->auto_punch_location();
+ Location * looploc = _session->locations()->auto_loop_location();
+ Location * punchloc = _session->locations()->auto_punch_location();
- session->locations()->clear_ranges ();
+ _session->locations()->clear_ranges ();
// re-add these
- if (looploc) session->locations()->add (looploc);
- if (punchloc) session->locations()->add (punchloc);
+ if (looploc) _session->locations()->add (looploc);
+ if (punchloc) _session->locations()->add (punchloc);
- XMLNode &after = session->locations()->get_state();
- session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
- session->commit_reversible_command ();
+ XMLNode &after = _session->locations()->get_state();
+ _session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after));
+ _session->commit_reversible_command ();
}
}
void
Editor::clear_locations ()
{
- session->begin_reversible_command (_("clear locations"));
- XMLNode &before = session->locations()->get_state();
- session->locations()->clear ();
- XMLNode &after = session->locations()->get_state();
- session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
- session->commit_reversible_command ();
- session->locations()->clear ();
+ _session->begin_reversible_command (_("clear locations"));
+ XMLNode &before = _session->locations()->get_state();
+ _session->locations()->clear ();
+ XMLNode &after = _session->locations()->get_state();
+ _session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after));
+ _session->commit_reversible_command ();
+ _session->locations()->clear ();
}
void
@@ -2231,7 +2231,7 @@ Editor::insert_region_list_drag (boost::shared_ptr<Region> region, int x, int y)
begin_reversible_command (_("insert dragged region"));
XMLNode &before = playlist->get_state();
playlist->add_region (RegionFactory::create (region), where, 1.0);
- session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
+ _session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
commit_reversible_command ();
}
@@ -2309,7 +2309,7 @@ Editor::insert_region_list_selection (float times)
begin_reversible_command (_("insert region"));
XMLNode &before = playlist->get_state();
playlist->add_region ((RegionFactory::create (region)), get_preferred_edit_position(), times);
- session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
+ _session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
commit_reversible_command ();
}
@@ -2333,12 +2333,12 @@ Editor::edit_envelope ()
void
Editor::transition_to_rolling (bool fwd)
{
- if (!session) {
+ if (!_session) {
return;
}
- if (session->config.get_external_sync()) {
- switch (session->config.get_sync_source()) {
+ if (_session->config.get_external_sync()) {
+ switch (_session->config.get_sync_source()) {
case JACK:
break;
default:
@@ -2347,24 +2347,24 @@ Editor::transition_to_rolling (bool fwd)
}
}
- if (session->is_auditioning()) {
- session->cancel_audition ();
+ if (_session->is_auditioning()) {
+ _session->cancel_audition ();
return;
}
- session->request_transport_speed (fwd ? 1.0f : -1.0f);
+ _session->request_transport_speed (fwd ? 1.0f : -1.0f);
}
void
Editor::play_from_start ()
{
- session->request_locate (session->current_start_frame(), true);
+ _session->request_locate (_session->current_start_frame(), true);
}
void
Editor::play_from_edit_point ()
{
- session->request_locate (get_preferred_edit_position(), true);
+ _session->request_locate (get_preferred_edit_position(), true);
}
void
@@ -2375,19 +2375,19 @@ Editor::play_from_edit_point_and_return ()
start_frame = get_preferred_edit_position (true);
- if (session->transport_rolling()) {
- session->request_locate (start_frame, false);
+ if (_session->transport_rolling()) {
+ _session->request_locate (start_frame, false);
return;
}
/* don't reset the return frame if its already set */
- if ((return_frame = session->requested_return_frame()) < 0) {
- return_frame = session->audible_frame();
+ if ((return_frame = _session->requested_return_frame()) < 0) {
+ return_frame = _session->audible_frame();
}
if (start_frame >= 0) {
- session->request_roll_at_and_return (start_frame, return_frame);
+ _session->request_roll_at_and_return (start_frame, return_frame);
}
}
@@ -2398,7 +2398,7 @@ Editor::play_selection ()
return;
}
- session->request_play_range (&selection->time, true);
+ _session->request_play_range (&selection->time, true);
}
void
@@ -2418,9 +2418,9 @@ Editor::loop_selected_region ()
// enable looping, reposition and start rolling
- session->request_play_loop (true);
- session->request_locate (tll->start(), false);
- session->request_transport_speed (1.0f);
+ _session->request_play_loop (true);
+ _session->request_locate (tll->start(), false);
+ _session->request_transport_speed (1.0f);
}
}
}
@@ -2432,7 +2432,7 @@ Editor::play_location (Location& location)
return;
}
- session->request_bounded_roll (location.start(), location.end());
+ _session->request_bounded_roll (location.start(), location.end());
}
void
@@ -2448,8 +2448,8 @@ Editor::loop_location (Location& location)
tll->set (location.start(), location.end());
// enable looping, reposition and start rolling
- session->request_play_loop (true);
- session->request_locate (tll->start(), true);
+ _session->request_play_loop (true);
+ _session->request_locate (tll->start(), true);
}
}
@@ -2546,8 +2546,8 @@ Editor::rename_region()
void
Editor::audition_playlist_region_via_route (boost::shared_ptr<Region> region, Route& route)
{
- if (session->is_auditioning()) {
- session->cancel_audition ();
+ if (_session->is_auditioning()) {
+ _session->cancel_audition ();
}
// note: some potential for creativity here, because region doesn't
@@ -2557,7 +2557,7 @@ Editor::audition_playlist_region_via_route (boost::shared_ptr<Region> region, Ro
route.set_solo (true, this);
- session->request_bounded_roll (region->position(), region->position() + region->length());
+ _session->request_bounded_roll (region->position(), region->position() + region->length());
/* XXX how to unset the solo state ? */
}
@@ -2569,7 +2569,7 @@ Editor::play_edit_range ()
nframes64_t start, end;
if (get_edit_op_range (start, end)) {
- session->request_bounded_roll (start, end);
+ _session->request_bounded_roll (start, end);
}
}
@@ -2595,13 +2595,13 @@ Editor::play_selected_region ()
}
}
- session->request_bounded_roll (start, end);
+ _session->request_bounded_roll (start, end);
}
void
Editor::audition_playlist_region_standalone (boost::shared_ptr<Region> region)
{
- session->audition_region (region);
+ _session->audition_region (region);
}
void
@@ -2670,7 +2670,7 @@ Editor::region_from_selection ()
}
internal_start = start - current->position();
- session->region_name (new_name, current->name(), true);
+ _session->region_name (new_name, current->name(), true);
boost::shared_ptr<Region> region (RegionFactory::create (current,
internal_start, selection_cnt, new_name));
}
@@ -2703,7 +2703,7 @@ Editor::create_region_from_selection (vector<boost::shared_ptr<Region> >& new_re
}
internal_start = start - current->position();
- session->region_name (new_name, current->name(), true);
+ _session->region_name (new_name, current->name(), true);
new_regions.push_back (RegionFactory::create (current,
internal_start, end - start + 1, new_name));
@@ -2724,7 +2724,7 @@ Editor::split_multichannel_region ()
vector< boost::shared_ptr<Region> > v;
for (list<RegionView*>::iterator x = rs.begin(); x != rs.end(); ++x) {
- (*x)->region()->separate_by_channel (*session, v);
+ (*x)->region()->separate_by_channel (*_session, v);
}
}
@@ -2845,7 +2845,7 @@ Editor::separate_regions_between (const TimeSelection& ts)
in_command = true;
}
- session->add_command(new MementoCommand<Playlist>(
+ _session->add_command(new MementoCommand<Playlist>(
*playlist, before, &playlist->get_state()));
}
}
@@ -2901,7 +2901,7 @@ Editor::separate_region_from_selection ()
void
Editor::separate_region_from_punch ()
{
- Location* loc = session->locations()->auto_punch_location();
+ Location* loc = _session->locations()->auto_punch_location();
if (loc) {
separate_regions_using_location (*loc);
}
@@ -2910,7 +2910,7 @@ Editor::separate_region_from_punch ()
void
Editor::separate_region_from_loop ()
{
- Location* loc = session->locations()->auto_loop_location();
+ Location* loc = _session->locations()->auto_loop_location();
if (loc) {
separate_regions_using_location (*loc);
}
@@ -3017,7 +3017,7 @@ Editor::crop_region_to (nframes64_t start, nframes64_t end)
XMLNode &before = (*i)->get_state();
region->trim_to (the_start, cnt, this);
XMLNode &after = (*i)->get_state();
- session->add_command (new MementoCommand<Playlist>(*(*i), &before, &after));
+ _session->add_command (new MementoCommand<Playlist>(*(*i), &before, &after));
}
commit_reversible_command ();
@@ -3031,11 +3031,11 @@ Editor::region_fill_track ()
get_regions_for_action (rs);
- if (!session || rs.empty()) {
+ if (!_session || rs.empty()) {
return;
}
- end = session->current_end_frame ();
+ end = _session->current_end_frame ();
begin_reversible_command (_("region fill"));
@@ -3057,7 +3057,7 @@ Editor::region_fill_track ()
XMLNode &before = pl->get_state();
pl->add_region (RegionFactory::create (region), region->last_frame(), times);
- session->add_command (new MementoCommand<Playlist>(*pl, &before, &pl->get_state()));
+ _session->add_command (new MementoCommand<Playlist>(*pl, &before, &pl->get_state()));
}
commit_reversible_command ();
@@ -3101,7 +3101,7 @@ Editor::region_fill_selection ()
XMLNode &before = playlist->get_state();
playlist->add_region (RegionFactory::create (region), start, times);
- session->add_command (new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
+ _session->add_command (new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
}
commit_reversible_command ();
@@ -3137,7 +3137,7 @@ Editor::set_sync_point (nframes64_t where, const RegionSelection& rs)
XMLNode &before = region->playlist()->get_state();
region->set_sync_position (where);
XMLNode &after = region->playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(region->playlist()), &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*(region->playlist()), &before, &after));
}
if (in_command) {
@@ -3163,7 +3163,7 @@ Editor::remove_region_sync ()
XMLNode &before = (*i)->region()->playlist()->get_state();
(*i)->region()->clear_sync_position ();
XMLNode &after = (*i)->region()->playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*((*i)->region()->playlist()), &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*((*i)->region()->playlist()), &before, &after));
}
commit_reversible_command ();
}
@@ -3184,7 +3184,7 @@ Editor::naturalize ()
XMLNode &before = (*i)->region()->get_state();
(*i)->region()->move_to_natural_position (this);
XMLNode &after = (*i)->region()->get_state();
- session->add_command (new MementoCommand<Region>(*((*i)->region().get()), &before, &after));
+ _session->add_command (new MementoCommand<Region>(*((*i)->region().get()), &before, &after));
}
commit_reversible_command ();
}
@@ -3286,7 +3286,7 @@ Editor::align_selection_relative (RegionPoint point, nframes64_t position, const
XMLNode &before = r->playlist()->get_state();
r->set_position (pos, this);
XMLNode &after = r->playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(r->playlist()), &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*(r->playlist()), &before, &after));
/* move rest by the same amount */
@@ -3305,7 +3305,7 @@ Editor::align_selection_relative (RegionPoint point, nframes64_t position, const
}
XMLNode &after = region->playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(region->playlist()), &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*(region->playlist()), &before, &after));
}
@@ -3358,7 +3358,7 @@ Editor::align_region_internal (boost::shared_ptr<Region> region, RegionPoint poi
}
XMLNode &after = region->playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(region->playlist()), &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*(region->playlist()), &before, &after));
}
void
@@ -3397,7 +3397,7 @@ Editor::trim_region (bool front)
(*i)->region()->trim_end (where, this);
}
XMLNode &after = pl->get_state();
- session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
}
}
@@ -3408,7 +3408,7 @@ Editor::trim_region (bool front)
void
Editor::trim_region_to_loop ()
{
- Location* loc = session->locations()->auto_loop_location();
+ Location* loc = _session->locations()->auto_loop_location();
if (!loc) {
return;
}
@@ -3418,7 +3418,7 @@ Editor::trim_region_to_loop ()
void
Editor::trim_region_to_punch ()
{
- Location* loc = session->locations()->auto_punch_location();
+ Location* loc = _session->locations()->auto_punch_location();
if (!loc) {
return;
}
@@ -3463,7 +3463,7 @@ Editor::trim_region_to_location (const Location& loc, const char* str)
XMLNode &before = rv->region()->playlist()->get_state();
rv->region()->trim_to (start, (end - start), this);
XMLNode &after = rv->region()->playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(
+ _session->add_command(new MementoCommand<Playlist>(
*(rv->region()->playlist()), &before, &after));
}
@@ -3501,9 +3501,9 @@ Editor::trim_region_to_edit_point ()
}
XMLNode &before = rv->region()->playlist()->get_state();
- rv->region()->trim_end( session_frame_to_track_frame(where, speed), this);
+ rv->region()->trim_end (session_frame_to_track_frame(where, speed), this);
XMLNode &after = rv->region()->playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(
+ _session->add_command(new MementoCommand<Playlist>(
*(rv->region()->playlist()), &before, &after));
}
@@ -3541,9 +3541,9 @@ Editor::trim_region_from_edit_point ()
}
XMLNode &before = rv->region()->playlist()->get_state();
- rv->region()->trim_front ( session_frame_to_track_frame(where, speed), this);
+ rv->region()->trim_front (session_frame_to_track_frame(where, speed), this);
XMLNode &after = rv->region()->playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(
+ _session->add_command(new MementoCommand<Playlist>(
*(rv->region()->playlist()), &before, &after));
}
@@ -3623,7 +3623,7 @@ Editor::trim_to_region(bool forward)
}
XMLNode &after = playlist->get_state();
- session->add_command(new MementoCommand<Playlist>(*playlist, &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*playlist, &before, &after));
}
commit_reversible_command ();
@@ -3750,7 +3750,7 @@ Editor::bounce_range_selection (bool replace, bool enable_processing)
}
XMLNode &after = playlist->get_state();
- session->add_command (new MementoCommand<Playlist> (*playlist, &before, &after));
+ _session->add_command (new MementoCommand<Playlist> (*playlist, &before, &after));
}
commit_reversible_command ();
@@ -3842,7 +3842,7 @@ Editor::cut_copy (CutCopyOp op)
bool ignored;
Location* loc = find_location_from_marker (entered_marker, ignored);
- if (session && loc) {
+ if (_session && loc) {
Glib::signal_idle().connect (sigc::bind (sigc::mem_fun(*this, &Editor::really_remove_marker), loc));
}
@@ -3944,7 +3944,7 @@ Editor::cut_copy_points (CutCopyOp op)
{
for (PointSelection::iterator i = selection->points.begin(); i != selection->points.end(); ++i) {
- AutomationTimeAxisView* atv = dynamic_cast<AutomationTimeAxisView*>(&(*i).track);
+ AutomationTimeAxisView* atv = dynamic_cast<AutomationTimeAxisView*>((*i).track);
if (atv) {
atv->cut_copy_clear_objects (selection->points, op);
@@ -3996,7 +3996,7 @@ Editor::remove_clicked_region ()
XMLNode &before = playlist->get_state();
playlist->remove_region (clicked_regionview->region());
XMLNode &after = playlist->get_state();
- session->add_command(new MementoCommand<Playlist>(*playlist, &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*playlist, &before, &after));
commit_reversible_command ();
}
@@ -4008,7 +4008,7 @@ Editor::remove_selected_regions ()
RegionSelection rs;
get_regions_for_action (rs);
- if (!session) {
+ if (!_session) {
return;
}
@@ -4070,7 +4070,7 @@ Editor::remove_selected_regions ()
for (pl = playlists.begin(); pl != playlists.end(); ++pl) {
(*pl).playlist->thaw ();
- session->add_command(new MementoCommand<Playlist>(*(*pl).playlist, (*pl).before, &(*pl).playlist->get_state()));
+ _session->add_command(new MementoCommand<Playlist>(*(*pl).playlist, (*pl).before, &(*pl).playlist->get_state()));
}
commit_reversible_command ();
@@ -4165,7 +4165,7 @@ Editor::cut_copy_regions (CutCopyOp op, RegionSelection& rs)
assert (z != pmap.end());
if (!(*z).pl) {
- npl = PlaylistFactory::create (pl->data_type(), *session, "cutlist", true);
+ npl = PlaylistFactory::create (pl->data_type(), *_session, "cutlist", true);
npl->freeze();
(*z).pl = npl;
} else {
@@ -4213,7 +4213,7 @@ Editor::cut_copy_regions (CutCopyOp op, RegionSelection& rs)
for (set<PlaylistState, lt_playlist>::iterator pl = freezelist.begin(); pl != freezelist.end(); ++pl) {
(*pl).playlist->thaw ();
- session->add_command (new MementoCommand<Playlist>(*(*pl).playlist, (*pl).before, &(*pl).playlist->get_state()));
+ _session->add_command (new MementoCommand<Playlist>(*(*pl).playlist, (*pl).before, &(*pl).playlist->get_state()));
}
}
@@ -4352,7 +4352,7 @@ Editor::duplicate_some_regions (RegionSelection& regions, float times)
playlist = (*i)->region()->playlist();
XMLNode &before = playlist->get_state();
playlist->duplicate (r, end_frame + (r->first_frame() - start_frame) + 1, times);
- session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
+ _session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
c.disconnect ();
@@ -4394,7 +4394,7 @@ Editor::duplicate_selection (float times)
XMLNode &before = playlist->get_state();
playlist->duplicate (*ri, selection->time[clicked_selection].end, times);
XMLNode &after = playlist->get_state();
- session->add_command (new MementoCommand<Playlist>(*playlist, &before, &after));
+ _session->add_command (new MementoCommand<Playlist>(*playlist, &before, &after));
++ri;
if (ri == new_regions.end()) {
@@ -4412,7 +4412,7 @@ Editor::reset_point_selection ()
for (PointSelection::iterator i = selection->points.begin(); i != selection->points.end(); ++i) {
- AutomationTimeAxisView* atv = dynamic_cast<AutomationTimeAxisView*>(&(*i).track);
+ AutomationTimeAxisView* atv = dynamic_cast<AutomationTimeAxisView*>((*i).track);
if (atv) {
atv->reset_objects (selection->points);
@@ -4441,7 +4441,7 @@ Editor::clear_playlist (boost::shared_ptr<Playlist> playlist)
XMLNode &before = playlist->get_state();
playlist->clear ();
XMLNode &after = playlist->get_state();
- session->add_command (new MementoCommand<Playlist>(*playlist.get(), &before, &after));
+ _session->add_command (new MementoCommand<Playlist>(*playlist.get(), &before, &after));
commit_reversible_command ();
}
@@ -4478,7 +4478,7 @@ Editor::nudge_track (bool use_edit, bool forwards)
XMLNode &before = playlist->get_state();
playlist->nudge_after (start, distance, forwards);
XMLNode &after = playlist->get_state();
- session->add_command (new MementoCommand<Playlist>(*playlist, &before, &after));
+ _session->add_command (new MementoCommand<Playlist>(*playlist, &before, &after));
}
commit_reversible_command ();
@@ -4490,7 +4490,7 @@ Editor::remove_last_capture ()
vector<string> choices;
string prompt;
- if (!session) {
+ if (!_session) {
return;
}
@@ -4504,18 +4504,18 @@ Editor::remove_last_capture ()
Gtkmm2ext::Choice prompter (prompt, choices);
if (prompter.run () == 1) {
- session->remove_last_capture ();
+ _session->remove_last_capture ();
}
} else {
- session->remove_last_capture();
+ _session->remove_last_capture();
}
}
void
Editor::normalize_region ()
{
- if (!session) {
+ if (!_session) {
return;
}
@@ -4556,7 +4556,7 @@ Editor::normalize_region ()
continue;
XMLNode &before = arv->region()->get_state();
arv->audio_region()->normalize_to (spin.get_value());
- session->add_command (new MementoCommand<Region>(*(arv->region().get()), &before, &arv->region()->get_state()));
+ _session->add_command (new MementoCommand<Region>(*(arv->region().get()), &before, &arv->region()->get_state()));
}
commit_reversible_command ();
@@ -4569,7 +4569,7 @@ Editor::normalize_region ()
void
Editor::reset_region_scale_amplitude ()
{
- if (!session) {
+ if (!_session) {
return;
}
@@ -4589,7 +4589,7 @@ Editor::reset_region_scale_amplitude ()
continue;
XMLNode &before = arv->region()->get_state();
arv->audio_region()->set_scale_amplitude (1.0f);
- session->add_command (new MementoCommand<Region>(*(arv->region().get()), &before, &arv->region()->get_state()));
+ _session->add_command (new MementoCommand<Region>(*(arv->region().get()), &before, &arv->region()->get_state()));
}
commit_reversible_command ();
@@ -4598,7 +4598,7 @@ Editor::reset_region_scale_amplitude ()
void
Editor::adjust_region_scale_amplitude (bool up)
{
- if (!session) {
+ if (!_session) {
return;
}
@@ -4639,7 +4639,7 @@ Editor::adjust_region_scale_amplitude (bool up)
}
arv->audio_region()->set_scale_amplitude (fraction);
- session->add_command (new MementoCommand<Region>(*(arv->region().get()), &before, &arv->region()->get_state()));
+ _session->add_command (new MementoCommand<Region>(*(arv->region().get()), &before, &arv->region()->get_state()));
}
commit_reversible_command ();
@@ -4649,18 +4649,18 @@ Editor::adjust_region_scale_amplitude (bool up)
void
Editor::reverse_region ()
{
- if (!session) {
+ if (!_session) {
return;
}
- Reverse rev (*session);
+ Reverse rev (*_session);
apply_filter (rev, _("reverse regions"));
}
void
Editor::strip_region_silence ()
{
- if (!session) {
+ if (!_session) {
return;
}
@@ -4684,7 +4684,7 @@ Editor::strip_region_silence ()
int const r = d.run ();
if (r == Gtk::RESPONSE_OK) {
- StripSilence s (*session, d.threshold (), d.minimum_length (), d.fade_length ());
+ StripSilence s (*_session, d.threshold (), d.minimum_length (), d.fade_length ());
apply_filter (s, _("strip silence"));
}
}
@@ -4725,7 +4725,7 @@ Editor::apply_midi_note_edit_op (MidiOperator& op)
cmd = apply_midi_note_edit_op_to_region (op, *mrv);
if (cmd) {
(*cmd)();
- session->add_command (cmd);
+ _session->add_command (cmd);
}
}
@@ -4739,7 +4739,7 @@ Editor::apply_midi_note_edit_op (MidiOperator& op)
void
Editor::quantize_region ()
{
- if (!session) {
+ if (!_session) {
return;
}
@@ -4750,7 +4750,7 @@ Editor::quantize_region ()
qd->hide ();
if (r == Gtk::RESPONSE_OK) {
- Quantize quant (*session, Plain,
+ Quantize quant (*_session, Plain,
qd->snap_start(), qd->snap_end(),
qd->start_grid_size(), qd->end_grid_size(),
qd->strength(), qd->swing(), qd->threshold());
@@ -4809,7 +4809,7 @@ Editor::apply_filter (Filter& filter, string command)
}
XMLNode &after = playlist->get_state();
- session->add_command(new MementoCommand<Playlist>(*playlist, &before, &after));
+ _session->add_command(new MementoCommand<Playlist>(*playlist, &before, &after));
} else {
goto out;
}
@@ -4883,11 +4883,11 @@ Editor::reset_region_gain_envelopes ()
{
RegionSelection rs = get_equivalent_regions (selection->regions, RouteGroup::Edit);
- if (!session || rs.empty()) {
+ if (!_session || rs.empty()) {
return;
}
- session->begin_reversible_command (_("reset region gain"));
+ _session->begin_reversible_command (_("reset region gain"));
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
@@ -4896,11 +4896,11 @@ Editor::reset_region_gain_envelopes ()
XMLNode& before (alist->get_state());
arv->audio_region()->set_default_envelope ();
- session->add_command (new MementoCommand<AutomationList>(*arv->audio_region()->envelope().get(), &before, &alist->get_state()));
+ _session->add_command (new MementoCommand<AutomationList>(*arv->audio_region()->envelope().get(), &before, &alist->get_state()));
}
}
- session->commit_reversible_command ();
+ _session->commit_reversible_command ();
}
void
@@ -4908,11 +4908,11 @@ Editor::toggle_gain_envelope_visibility ()
{
RegionSelection rs = get_equivalent_regions (selection->regions, RouteGroup::Edit);
- if (!session || rs.empty()) {
+ if (!_session || rs.empty()) {
return;
}
- session->begin_reversible_command (_("region gain envelope visible"));
+ _session->begin_reversible_command (_("region gain envelope visible"));
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
@@ -4920,11 +4920,11 @@ Editor::toggle_gain_envelope_visibility ()
XMLNode &before = arv->region()->get_state ();
arv->set_envelope_visible (!arv->envelope_visible());
XMLNode &after = arv->region()->get_state ();
- session->add_command (new MementoCommand<Region> (*(arv->region().get()), &before, &after));
+ _session->add_command (new MementoCommand<Region> (*(arv->region().get()), &before, &after));
}
}
- session->commit_reversible_command ();
+ _session->commit_reversible_command ();
}
void
@@ -4932,11 +4932,11 @@ Editor::toggle_gain_envelope_active ()
{
RegionSelection rs = get_equivalent_regions (selection->regions, RouteGroup::Edit);
- if (!session || rs.empty()) {
+ if (!_session || rs.empty()) {
return;
}
- session->begin_reversible_command (_("region gain envelope active"));
+ _session->begin_reversible_command (_("region gain envelope active"));
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
@@ -4944,11 +4944,11 @@ Editor::toggle_gain_envelope_active ()
XMLNode &before = arv->region()->get_state ();
arv->audio_region()->set_envelope_active (!arv->audio_region()->envelope_active());
XMLNode &after = arv->region()->get_state ();
- session->add_command (new MementoCommand<Region> (*(arv->region().get()), &before, &after));
+ _session->add_command (new MementoCommand<Region> (*(arv->region().get()), &before, &after));
}
}
- session->commit_reversible_command ();
+ _session->commit_reversible_command ();
}
void
@@ -4956,20 +4956,20 @@ Editor::toggle_region_lock ()
{
RegionSelection rs = get_equivalent_regions (selection->regions, RouteGroup::Edit);
- if (!session || rs.empty()) {
+ if (!_session || rs.empty()) {
return;
}
- session->begin_reversible_command (_("region lock"));
+ _session->begin_reversible_command (_("region lock"));
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
XMLNode &before = (*i)->region()->get_state ();
(*i)->region()->set_locked (!(*i)->region()->locked());
XMLNode &after = (*i)->region()->get_state ();
- session->add_command (new MementoCommand<Region> (*((*i)->region().get()), &before, &after));
+ _session->add_command (new MementoCommand<Region> (*((*i)->region().get()), &before, &after));
}
- session->commit_reversible_command ();
+ _session->commit_reversible_command ();
}
void
@@ -4977,20 +4977,20 @@ Editor::set_region_lock_style (Region::PositionLockStyle ps)
{
RegionSelection rs = get_equivalent_regions (selection->regions, RouteGroup::Edit);
- if (!session || rs.empty()) {
+ if (!_session || rs.empty()) {
return;
}
- session->begin_reversible_command (_("region lock style"));
+ _session->begin_reversible_command (_("region lock style"));
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
XMLNode &before = (*i)->region()->get_state ();
(*i)->region()->set_position_lock_style (ps);
XMLNode &after = (*i)->region()->get_state ();
- session->add_command (new MementoCommand<Region> (*((*i)->region().get()), &before, &after));
+ _session->add_command (new MementoCommand<Region> (*((*i)->region().get()), &before, &after));
}
- session->commit_reversible_command ();
+ _session->commit_reversible_command ();
}
@@ -4999,20 +4999,20 @@ Editor::toggle_region_mute ()
{
RegionSelection rs = get_equivalent_regions (selection->regions, RouteGroup::Edit);
- if (!session || rs.empty()) {
+ if (!_session || rs.empty()) {
return;
}
- session->begin_reversible_command (_("region mute"));
+ _session->begin_reversible_command (_("region mute"));
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
XMLNode &before = (*i)->region()->get_state ();
(*i)->region()->set_muted (!(*i)->region()->muted());
XMLNode &after = (*i)->region()->get_state ();
- session->add_command (new MementoCommand<Region> (*((*i)->region().get()), &before, &after));
+ _session->add_command (new MementoCommand<Region> (*((*i)->region().get()), &before, &after));
}
- session->commit_reversible_command ();
+ _session->commit_reversible_command ();
}
void
@@ -5020,20 +5020,20 @@ Editor::toggle_region_opaque ()
{
RegionSelection rs = get_equivalent_regions (selection->regions, RouteGroup::Edit);
- if (!session || rs.empty()) {
+ if (!_session || rs.empty()) {
return;
}
- session->begin_reversible_command (_("region opacity"));
+ _session->begin_reversible_command (_("region opacity"));
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
XMLNode &before = (*i)->region()->get_state ();
(*i)->region()->set_opaque (!(*i)->region()->opaque());
XMLNode &after = (*i)->region()->get_state ();
- session->add_command (new MementoCommand<Region> (*((*i)->region().get()), &before, &after));
+ _session->add_command (new MementoCommand<Region> (*((*i)->region().get()), &before, &after));
}
- session->commit_reversible_command ();
+ _session->commit_reversible_command ();
}
void
@@ -5125,7 +5125,7 @@ Editor::set_fade_length (bool in)
}
XMLNode &after = alist->get_state();
- session->add_command(new MementoCommand<AutomationList>(*alist, &before, &after));
+ _session->add_command(new MementoCommand<AutomationList>(*alist, &before, &after));
}
commit_reversible_command ();
@@ -5175,7 +5175,7 @@ Editor::toggle_fade_active (bool in)
region->set_fade_out_active (!yn);
}
XMLNode &after = region->get_state();
- session->add_command(new MementoCommand<AudioRegion>(*region.get(), &before, &after));
+ _session->add_command(new MementoCommand<AudioRegion>(*region.get(), &before, &after));
}
commit_reversible_command ();
@@ -5207,7 +5207,7 @@ Editor::set_fade_in_shape (AudioRegion::FadeShape shape)
tmp->audio_region()->set_fade_in_shape (shape);
XMLNode &after = alist->get_state();
- session->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &after));
+ _session->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &after));
}
commit_reversible_command ();
@@ -5240,7 +5240,7 @@ Editor::set_fade_out_shape (AudioRegion::FadeShape shape)
tmp->audio_region()->set_fade_out_shape (shape);
XMLNode &after = alist->get_state();
- session->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &after));
+ _session->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &after));
}
commit_reversible_command ();
@@ -5274,7 +5274,7 @@ Editor::set_fade_in_active (bool yn)
ar->set_fade_in_active (yn);
XMLNode &after = ar->get_state();
- session->add_command(new MementoCommand<AudioRegion>(*ar, &before, &after));
+ _session->add_command(new MementoCommand<AudioRegion>(*ar, &before, &after));
}
commit_reversible_command ();
@@ -5307,7 +5307,7 @@ Editor::set_fade_out_active (bool yn)
ar->set_fade_out_active (yn);
XMLNode &after = ar->get_state();
- session->add_command(new MementoCommand<AudioRegion>(*ar, &before, &after));
+ _session->add_command(new MementoCommand<AudioRegion>(*ar, &before, &after));
}
commit_reversible_command ();
@@ -5363,7 +5363,7 @@ Editor::toggle_selected_region_fades (int dir)
void
Editor::update_region_fade_visibility ()
{
- bool _fade_visibility = session->config.get_show_region_fades ();
+ bool _fade_visibility = _session->config.get_show_region_fades ();
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
AudioTimeAxisView* v = dynamic_cast<AudioTimeAxisView*>(*i);
@@ -5381,7 +5381,7 @@ Editor::update_region_fade_visibility ()
void
Editor::update_xfade_visibility ()
{
- _xfade_visibility = session->config.get_xfades_visible ();
+ _xfade_visibility = _session->config.get_xfades_visible ();
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
AudioTimeAxisView* v = dynamic_cast<AudioTimeAxisView*>(*i);
@@ -5426,7 +5426,7 @@ void
Editor::set_playhead_cursor ()
{
if (entered_marker) {
- session->request_locate (entered_marker->position(), session->transport_rolling());
+ _session->request_locate (entered_marker->position(), _session->transport_rolling());
} else {
nframes64_t where;
bool ignored;
@@ -5437,8 +5437,8 @@ Editor::set_playhead_cursor ()
snap_to (where);
- if (session) {
- session->request_locate (where, session->transport_rolling());
+ if (_session) {
+ _session->request_locate (where, _session->transport_rolling());
}
}
}
@@ -5580,7 +5580,7 @@ Editor::ensure_track_visible(TimeAxisView *track)
void
Editor::set_loop_from_selection (bool play)
{
- if (session == 0 || selection->time.empty()) {
+ if (_session == 0 || selection->time.empty()) {
return;
}
@@ -5590,15 +5590,15 @@ Editor::set_loop_from_selection (bool play)
set_loop_range (start, end, _("set loop range from selection"));
if (play) {
- session->request_play_loop (true);
- session->request_locate (start, true);
+ _session->request_play_loop (true);
+ _session->request_locate (start, true);
}
}
void
Editor::set_loop_from_edit_range (bool play)
{
- if (session == 0) {
+ if (_session == 0) {
return;
}
@@ -5612,8 +5612,8 @@ Editor::set_loop_from_edit_range (bool play)
set_loop_range (start, end, _("set loop range from edit range"));
if (play) {
- session->request_play_loop (true);
- session->request_locate (start, true);
+ _session->request_play_loop (true);
+ _session->request_locate (start, true);
}
}
@@ -5643,15 +5643,15 @@ Editor::set_loop_from_region (bool play)
set_loop_range (start, end, _("set loop range from region"));
if (play) {
- session->request_play_loop (true);
- session->request_locate (start, true);
+ _session->request_play_loop (true);
+ _session->request_locate (start, true);
}
}
void
Editor::set_punch_from_selection ()
{
- if (session == 0 || selection->time.empty()) {
+ if (_session == 0 || selection->time.empty()) {
return;
}
@@ -5664,7 +5664,7 @@ Editor::set_punch_from_selection ()
void
Editor::set_punch_from_edit_range ()
{
- if (session == 0) {
+ if (_session == 0) {
return;
}
@@ -5721,7 +5721,7 @@ Editor::pitch_shift_regions ()
void
Editor::use_region_as_bar ()
{
- if (!session) {
+ if (!_session) {
return;
}
@@ -5752,7 +5752,7 @@ Editor::define_one_bar (nframes64_t start, nframes64_t end)
{
nframes64_t length = end - start;
- const Meter& m (session->tempo_map().meter_at (start));
+ const Meter& m (_session->tempo_map().meter_at (start));
/* length = 1 bar */
@@ -5764,7 +5764,7 @@ Editor::define_one_bar (nframes64_t start, nframes64_t end)
/* beats per minute = */
- double beats_per_minute = (session->frame_rate() * 60.0) / frames_per_beat;
+ double beats_per_minute = (_session->frame_rate() * 60.0) / frames_per_beat;
/* now decide whether to:
@@ -5773,11 +5773,11 @@ Editor::define_one_bar (nframes64_t start, nframes64_t end)
*/
- const TempoSection& t (session->tempo_map().tempo_section_at (start));
+ const TempoSection& t (_session->tempo_map().tempo_section_at (start));
bool do_global = false;
- if ((session->tempo_map().n_tempos() == 1) && (session->tempo_map().n_meters() == 1)) {
+ if ((_session->tempo_map().n_tempos() == 1) && (_session->tempo_map().n_meters() == 1)) {
/* only 1 tempo & 1 meter: ask if the user wants to set the tempo
at the start, or create a new marker
@@ -5812,19 +5812,19 @@ Editor::define_one_bar (nframes64_t start, nframes64_t end)
}
begin_reversible_command (_("set tempo from region"));
- XMLNode& before (session->tempo_map().get_state());
+ XMLNode& before (_session->tempo_map().get_state());
if (do_global) {
- session->tempo_map().change_initial_tempo (beats_per_minute, t.note_type());
+ _session->tempo_map().change_initial_tempo (beats_per_minute, t.note_type());
} else if (t.frame() == start) {
- session->tempo_map().change_existing_tempo_at (start, beats_per_minute, t.note_type());
+ _session->tempo_map().change_existing_tempo_at (start, beats_per_minute, t.note_type());
} else {
- session->tempo_map().add_tempo (Tempo (beats_per_minute, t.note_type()), start);
+ _session->tempo_map().add_tempo (Tempo (beats_per_minute, t.note_type()), start);
}
- XMLNode& after (session->tempo_map().get_state());
+ XMLNode& after (_session->tempo_map().get_state());
- session->add_command (new MementoCommand<TempoMap>(session->tempo_map(), &before, &after));
+ _session->add_command (new MementoCommand<TempoMap>(_session->tempo_map(), &before, &after));
commit_reversible_command ();
}
@@ -5833,7 +5833,7 @@ Editor::split_region_at_transients ()
{
AnalysisFeatureList positions;
- if (!session) {
+ if (!_session) {
return;
}
@@ -5845,7 +5845,7 @@ Editor::split_region_at_transients ()
return;
}
- session->begin_reversible_command (_("split regions"));
+ _session->begin_reversible_command (_("split regions"));
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ) {
@@ -5864,7 +5864,7 @@ Editor::split_region_at_transients ()
i = tmp;
}
- session->commit_reversible_command ();
+ _session->commit_reversible_command ();
}
@@ -5963,7 +5963,7 @@ Editor::split_region_at_points (boost::shared_ptr<Region> r, AnalysisFeatureList
string new_name;
- if (session->region_name (new_name, r->name())) {
+ if (_session->region_name (new_name, r->name())) {
break;
}
@@ -5993,7 +5993,7 @@ Editor::split_region_at_points (boost::shared_ptr<Region> r, AnalysisFeatureList
XMLNode& after (pl->get_state());
- session->add_command (new MementoCommand<Playlist>(*pl, &before, &after));
+ _session->add_command (new MementoCommand<Playlist>(*pl, &before, &after));
}
void
@@ -6001,11 +6001,11 @@ Editor::tab_to_transient (bool forward)
{
AnalysisFeatureList positions;
- if (!session) {
+ if (!_session) {
return;
}
- nframes64_t pos = session->audible_frame ();
+ nframes64_t pos = _session->audible_frame ();
if (!selection->tracks.empty()) {
@@ -6043,7 +6043,7 @@ Editor::tab_to_transient (bool forward)
}
}
- TransientDetector::cleanup_transients (positions, session->frame_rate(), 3.0);
+ TransientDetector::cleanup_transients (positions, _session->frame_rate(), 3.0);
if (forward) {
AnalysisFeatureList::iterator x;
@@ -6055,7 +6055,7 @@ Editor::tab_to_transient (bool forward)
}
if (x != positions.end ()) {
- session->request_locate (*x);
+ _session->request_locate (*x);
}
} else {
@@ -6068,19 +6068,19 @@ Editor::tab_to_transient (bool forward)
}
if (x != positions.rend ()) {
- session->request_locate (*x);
+ _session->request_locate (*x);
}
}
}
void
Editor::playhead_forward_to_grid ()
{
- if (!session) return;
+ if (!_session) return;
nframes64_t pos = playhead_cursor->current_frame;
if (pos < max_frames - 1) {
pos += 2;
snap_to_internal (pos, 1, false);
- session->request_locate (pos);
+ _session->request_locate (pos);
}
}
@@ -6088,12 +6088,12 @@ Editor::playhead_forward_to_grid ()
void
Editor::playhead_backward_to_grid ()
{
- if (!session) return;
+ if (!_session) return;
nframes64_t pos = playhead_cursor->current_frame;
if (pos > 2) {
pos -= 2;
snap_to_internal (pos, -1, false);
- session->request_locate (pos);
+ _session->request_locate (pos);
}
}
@@ -6207,7 +6207,7 @@ Editor::remove_tracks ()
}
for (vector<boost::shared_ptr<Route> >::iterator x = routes.begin(); x != routes.end(); ++x) {
- session->remove_route (*x);
+ _session->remove_route (*x);
}
}
@@ -6233,7 +6233,7 @@ Editor::do_insert_time ()
table.attach (time_label, 0, 1, 0, 1, FILL | EXPAND);
AudioClock clock ("insertTimeClock", true, X_("InsertTimeClock"), true, false, true, true);
clock.set (0);
- clock.set_session (session);
+ clock.set_session (_session);
clock.set_bbt_reference (pos);
table.attach (clock, 1, 2, 0, 1);
@@ -6317,7 +6317,7 @@ Editor::insert_time (nframes64_t pos, nframes64_t frames, InsertTimeOption opt,
XMLNode &after = pl->get_state();
- session->add_command (new MementoCommand<Playlist> (*pl, &before, &after));
+ _session->add_command (new MementoCommand<Playlist> (*pl, &before, &after));
commit = true;
}
@@ -6332,8 +6332,8 @@ Editor::insert_time (nframes64_t pos, nframes64_t frames, InsertTimeOption opt,
/* markers */
if (markers_too) {
bool moved = false;
- XMLNode& before (session->locations()->get_state());
- Locations::LocationList copy (session->locations()->list());
+ XMLNode& before (_session->locations()->get_state());
+ Locations::LocationList copy (_session->locations()->list());
for (Locations::LocationList::iterator i = copy.begin(); i != copy.end(); ++i) {
@@ -6349,13 +6349,13 @@ Editor::insert_time (nframes64_t pos, nframes64_t frames, InsertTimeOption opt,
}
if (moved) {
- XMLNode& after (session->locations()->get_state());
- session->add_command (new MementoCommand<Locations>(*session->locations(), &before, &after));
+ XMLNode& after (_session->locations()->get_state());
+ _session->add_command (new MementoCommand<Locations>(*_session->locations(), &before, &after));
}
}
if (tempo_too) {
- session->tempo_map().insert_time (pos, frames);
+ _session->tempo_map().insert_time (pos, frames);
}
if (commit) {
diff --git a/gtk2_ardour/editor_regions.cc b/gtk2_ardour/editor_regions.cc
index 8aa6d94192..2501f93726 100644
--- a/gtk2_ardour/editor_regions.cc
+++ b/gtk2_ardour/editor_regions.cc
@@ -130,13 +130,15 @@ EditorRegions::EditorRegions (Editor* e)
}
void
-EditorRegions::connect_to_session (ARDOUR::Session* s)
+EditorRegions::set_session (ARDOUR::Session* s)
{
- EditorComponent::connect_to_session (s);
+ EditorComponent::set_session (s);
- _session_connections.push_back (_session->RegionsAdded.connect (sigc::mem_fun(*this, &EditorRegions::handle_new_regions)));
- _session_connections.push_back (_session->RegionRemoved.connect (sigc::mem_fun(*this, &EditorRegions::handle_region_removed)));
- _session_connections.push_back (_session->RegionHiddenChange.connect (sigc::mem_fun(*this, &EditorRegions::region_hidden)));
+ if (_session) {
+ _session_connections.add_connection (_session->RegionsAdded.connect (boost::bind (&EditorRegions::handle_new_regions, this, _1)));
+ _session_connections.add_connection (_session->RegionRemoved.connect (boost::bind (&EditorRegions::handle_region_removed, this, _1)));
+ _session_connections.add_connection (_session->RegionHiddenChange.connect (boost::bind (&EditorRegions::region_hidden, this, _1)));
+ }
redisplay ();
}
diff --git a/gtk2_ardour/editor_regions.h b/gtk2_ardour/editor_regions.h
index cc031b141e..59659d3879 100644
--- a/gtk2_ardour/editor_regions.h
+++ b/gtk2_ardour/editor_regions.h
@@ -26,7 +26,7 @@ class EditorRegions : public EditorComponent
public:
EditorRegions (Editor *);
- void connect_to_session (ARDOUR::Session *);
+ void set_session (ARDOUR::Session *);
Gtk::Widget& widget () {
return _scroller;
diff --git a/gtk2_ardour/editor_route_groups.cc b/gtk2_ardour/editor_route_groups.cc
index 10edec8682..d0d0298c08 100644
--- a/gtk2_ardour/editor_route_groups.cc
+++ b/gtk2_ardour/editor_route_groups.cc
@@ -604,7 +604,9 @@ EditorRouteGroups::groups_changed ()
row[_columns.routegroup] = 0;
}
- _session->foreach_route_group (sigc::mem_fun (*this, &EditorRouteGroups::add));
+ if (_session) {
+ _session->foreach_route_group (sigc::mem_fun (*this, &EditorRouteGroups::add));
+ }
}
void
@@ -661,12 +663,14 @@ EditorRouteGroups::clear ()
}
void
-EditorRouteGroups::connect_to_session (Session* s)
+EditorRouteGroups::set_session (Session* s)
{
- EditorComponent::connect_to_session (s);
+ EditorComponent::set_session (s);
- _session_connections.push_back (_session->route_group_added.connect (sigc::mem_fun (*this, &EditorRouteGroups::add)));
- _session_connections.push_back (_session->route_group_removed.connect (sigc::mem_fun (*this, &EditorRouteGroups::groups_changed)));
+ if (_session) {
+ _session_connections.add_connection (_session->route_group_added.connect (boost::bind (&EditorRouteGroups::add, this, _1)));
+ _session_connections.add_connection (_session->route_group_removed.connect (boost::bind (&EditorRouteGroups::groups_changed, this)));
+ }
groups_changed ();
}
diff --git a/gtk2_ardour/editor_route_groups.h b/gtk2_ardour/editor_route_groups.h
index b1b82fb531..5408649f95 100644
--- a/gtk2_ardour/editor_route_groups.h
+++ b/gtk2_ardour/editor_route_groups.h
@@ -24,7 +24,7 @@ class EditorRouteGroups : public EditorComponent
public:
EditorRouteGroups (Editor *);
- void connect_to_session (ARDOUR::Session *);
+ void set_session (ARDOUR::Session *);
Gtk::Widget& widget () {
return *_display_packer;
diff --git a/gtk2_ardour/editor_routes.cc b/gtk2_ardour/editor_routes.cc
index de6b081fd4..e3a831a8b9 100644
--- a/gtk2_ardour/editor_routes.cc
+++ b/gtk2_ardour/editor_routes.cc
@@ -150,17 +150,19 @@ EditorRoutes::EditorRoutes (Editor* e)
_model->signal_rows_reordered().connect (sigc::mem_fun (*this, &EditorRoutes::reordered));
_display.signal_button_press_event().connect (sigc::mem_fun (*this, &EditorRoutes::button_press), false);
- Route::SyncOrderKeys.connect (sigc::mem_fun (*this, &EditorRoutes::sync_order_keys));
+ scoped_connect (Route::SyncOrderKeys, (sigc::mem_fun (*this, &EditorRoutes::sync_order_keys)));
}
void
-EditorRoutes::connect_to_session (Session* s)
+EditorRoutes::set_session (Session* s)
{
- EditorComponent::connect_to_session (s);
+ EditorComponent::set_session (s);
initial_display ();
- _session->SoloChanged.connect (sigc::mem_fun (*this, &EditorRoutes::solo_changed_so_update_mute));
+ if (_session) {
+ scoped_connect (_session->SoloChanged, (sigc::mem_fun (*this, &EditorRoutes::solo_changed_so_update_mute)));
+ }
}
void
@@ -260,15 +262,15 @@ EditorRoutes::show_menu ()
void
EditorRoutes::redisplay ()
{
+ if (_no_redisplay || !_session) {
+ return;
+ }
+
TreeModel::Children rows = _model->children();
TreeModel::Children::iterator i;
uint32_t position;
int n;
- if (_no_redisplay) {
- return;
- }
-
for (n = 0, position = 0, i = rows.begin(); i != rows.end(); ++i) {
TimeAxisView *tv = (*i)[_columns.tv];
boost::shared_ptr<Route> route = (*i)[_columns.route];
@@ -380,18 +382,19 @@ EditorRoutes::routes_added (list<RouteTimeAxisView*> routes)
_ignore_reorder = false;
boost::weak_ptr<Route> wr ((*x)->route());
- (*x)->route()->gui_changed.connect (sigc::mem_fun (*this, &EditorRoutes::handle_gui_changes));
- (*x)->route()->NameChanged.connect (sigc::bind (sigc::mem_fun (*this, &EditorRoutes::route_name_changed), wr));
- (*x)->GoingAway.connect (sigc::bind (sigc::mem_fun (*this, &EditorRoutes::route_removed), *x));
+
+ scoped_connect ((*x)->route()->gui_changed, boost::bind (&EditorRoutes::handle_gui_changes, this, _1, _2));
+ scoped_connect ((*x)->route()->NameChanged, boost::bind (&EditorRoutes::route_name_changed, this, wr));
+ scoped_connect ((*x)->GoingAway, boost::bind (&EditorRoutes::route_removed, this, *x));
if ((*x)->is_track()) {
boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track> ((*x)->route());
- t->diskstream()->RecordEnableChanged.connect (sigc::mem_fun (*this, &EditorRoutes::update_rec_display));
+ scoped_connect (t->diskstream()->RecordEnableChanged, boost::bind (&EditorRoutes::update_rec_display, this));
}
- (*x)->route()->mute_changed.connect (sigc::mem_fun (*this, &EditorRoutes::update_mute_display));
- (*x)->route()->solo_changed.connect (sigc::mem_fun (*this, &EditorRoutes::update_solo_display));
- (*x)->route()->solo_isolated_changed.connect (sigc::mem_fun (*this, &EditorRoutes::update_solo_isolate_display));
+ scoped_connect ((*x)->route()->mute_changed, boost::bind (&EditorRoutes::update_mute_display, this));
+ scoped_connect ((*x)->route()->solo_changed, boost::bind (&EditorRoutes::update_solo_display, this));
+ scoped_connect ((*x)->route()->solo_isolated_changed, boost::bind (&EditorRoutes::update_solo_isolate_display, this));
}
update_rec_display ();
@@ -710,15 +713,19 @@ struct EditorOrderRouteSorter {
void
EditorRoutes::initial_display ()
{
+ suspend_redisplay ();
+ _model->clear ();
+
+ if (!_session) {
+ resume_redisplay ();
+ return;
+ }
+
boost::shared_ptr<RouteList> routes = _session->get_routes();
RouteList r (*routes);
EditorOrderRouteSorter sorter;
r.sort (sorter);
-
- suspend_redisplay ();
-
- _model->clear ();
_editor->handle_new_route (r);
/* don't show master bus in a new session */
@@ -900,19 +907,19 @@ EditorRoutes::update_rec_display ()
}
void
-EditorRoutes::update_mute_display (void* /*src*/)
+EditorRoutes::update_mute_display ()
{
TreeModel::Children rows = _model->children();
TreeModel::Children::iterator i;
for (i = rows.begin(); i != rows.end(); ++i) {
boost::shared_ptr<Route> route = (*i)[_columns.route];
- (*i)[_columns.mute_state] = RouteUI::mute_visual_state (*_session, route) > 0 ? 1 : 0;
+ (*i)[_columns.mute_state] = RouteUI::mute_visual_state (_session, route) > 0 ? 1 : 0;
}
}
void
-EditorRoutes::update_solo_display (void* /*src*/)
+EditorRoutes::update_solo_display ()
{
TreeModel::Children rows = _model->children();
TreeModel::Children::iterator i;
@@ -924,7 +931,7 @@ EditorRoutes::update_solo_display (void* /*src*/)
}
void
-EditorRoutes::update_solo_isolate_display (void* /*src*/)
+EditorRoutes::update_solo_isolate_display ()
{
TreeModel::Children rows = _model->children();
TreeModel::Children::iterator i;
@@ -973,8 +980,7 @@ void
EditorRoutes::solo_changed_so_update_mute ()
{
ENSURE_GUI_THREAD (*this, &EditorRoutes::solo_changed_so_update_mute)
-
- update_mute_display (this);
+ update_mute_display ();
}
void
diff --git a/gtk2_ardour/editor_routes.h b/gtk2_ardour/editor_routes.h
index 756796dbda..23e1e93388 100644
--- a/gtk2_ardour/editor_routes.h
+++ b/gtk2_ardour/editor_routes.h
@@ -17,12 +17,18 @@
*/
-class EditorRoutes : public EditorComponent
+#ifndef __ardour_gtk_editor_route_h__
+#define __ardour_gtk_editor_route_h__
+
+#include "pbd/scoped_connections.h"
+#include "editor_component.h"
+
+class EditorRoutes : public EditorComponent, public PBD::ScopedConnectionList
{
public:
EditorRoutes (Editor *);
- void connect_to_session (ARDOUR::Session *);
+ void set_session (ARDOUR::Session *);
Gtk::Widget& widget () {
return _scroller;
@@ -66,9 +72,9 @@ private:
void route_removed (TimeAxisView *);
void handle_gui_changes (std::string const &, void *);
void update_rec_display ();
- void update_mute_display (void* /*src*/);
- void update_solo_display (void* /*src*/);
- void update_solo_isolate_display (void* /*src*/);
+ void update_mute_display ();
+ void update_solo_display ();
+ void update_solo_isolate_display ();
void set_all_tracks_visibility (bool);
void set_all_audio_visibility (int, bool);
void show_all_routes ();
@@ -126,3 +132,5 @@ private:
Gtk::Menu* _menu;
};
+
+#endif /* __ardour_gtk_editor_route_h__ */
diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc
index be806eb366..880b6812b5 100644
--- a/gtk2_ardour/editor_rulers.cc
+++ b/gtk2_ardour/editor_rulers.cc
@@ -215,7 +215,7 @@ Editor::ruler_scroll (GdkEventScroll* event)
gint
Editor::ruler_button_press (GdkEventButton* ev)
{
- if (session == 0) {
+ if (_session == 0) {
return FALSE;
}
@@ -241,8 +241,8 @@ Editor::ruler_button_press (GdkEventButton* ev)
if (ev->button == 1) {
// Since we will locate the playhead on button release, cancel any running
// auditions.
- if (session->is_auditioning()) {
- session->cancel_audition ();
+ if (_session->is_auditioning()) {
+ _session->cancel_audition ();
}
/* playhead cursor */
@@ -258,7 +258,7 @@ Editor::ruler_button_press (GdkEventButton* ev)
gint
Editor::ruler_button_release (GdkEventButton* ev)
{
- if (session == 0) {
+ if (_session == 0) {
return FALSE;
}
@@ -308,7 +308,7 @@ Editor::ruler_label_button_release (GdkEventButton* ev)
gint
Editor::ruler_mouse_motion (GdkEventMotion* ev)
{
- if (session == 0) {
+ if (_session == 0) {
return FALSE;
}
@@ -443,15 +443,15 @@ Editor::store_ruler_visibility ()
node->add_property (X_("transportmarker"), ruler_loop_punch_action->get_active() ? "yes": "no");
node->add_property (X_("cdmarker"), ruler_cd_marker_action->get_active() ? "yes": "no");
- session->add_extra_xml (*node);
- session->set_dirty ();
+ _session->add_extra_xml (*node);
+ _session->set_dirty ();
}
void
Editor::restore_ruler_visibility ()
{
XMLProperty* prop;
- XMLNode * node = session->extra_xml (X_("RulerVisibility"));
+ XMLNode * node = _session->extra_xml (X_("RulerVisibility"));
no_ruler_shown_update = true;
@@ -529,11 +529,11 @@ Editor::restore_ruler_visibility ()
}
} else {
- // this session doesn't yet know about the cdmarker ruler
+ // this _session doesn't yet know about the cdmarker ruler
// as a benefit to the user who doesn't know the feature exists, show the ruler if
// any cd marks exist
ruler_cd_marker_action->set_active (false);
- const Locations::LocationList & locs = session->locations()->list();
+ const Locations::LocationList & locs = _session->locations()->list();
for (Locations::LocationList::const_iterator i = locs.begin(); i != locs.end(); ++i) {
if ((*i)->is_cd_marker()) {
ruler_cd_marker_action->set_active (true);
@@ -774,7 +774,7 @@ Editor::update_just_timecode ()
{
ENSURE_GUI_THREAD (*this, &Editor::update_just_timecode)
- if (session == 0) {
+ if (_session == 0) {
return;
}
@@ -782,14 +782,14 @@ Editor::update_just_timecode ()
if (ruler_timecode_action->get_active()) {
gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_timecode_ruler), leftmost_frame, rightmost_frame,
- leftmost_frame, session->current_end_frame());
+ leftmost_frame, _session->current_end_frame());
}
}
void
Editor::compute_fixed_ruler_scale ()
{
- if (session == 0) {
+ if (_session == 0) {
return;
}
@@ -807,7 +807,7 @@ Editor::update_fixed_rulers ()
{
nframes64_t rightmost_frame;
- if (session == 0) {
+ if (_session == 0) {
return;
}
@@ -823,24 +823,24 @@ Editor::update_fixed_rulers ()
if (ruler_timecode_action->get_active()) {
gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_timecode_ruler), leftmost_frame, rightmost_frame,
- leftmost_frame, session->current_end_frame());
+ leftmost_frame, _session->current_end_frame());
}
if (ruler_samples_action->get_active()) {
gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_frames_ruler), leftmost_frame, rightmost_frame,
- leftmost_frame, session->current_end_frame());
+ leftmost_frame, _session->current_end_frame());
}
if (ruler_minsec_action->get_active()) {
gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_minsec_ruler), leftmost_frame, rightmost_frame,
- leftmost_frame, session->current_end_frame());
+ leftmost_frame, _session->current_end_frame());
}
}
void
Editor::update_tempo_based_rulers ()
{
- if (session == 0) {
+ if (_session == 0) {
return;
}
@@ -848,7 +848,7 @@ Editor::update_tempo_based_rulers ()
if (ruler_bbt_action->get_active()) {
gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_bbt_ruler), leftmost_frame, leftmost_frame+current_page_frames(),
- leftmost_frame, session->current_end_frame());
+ leftmost_frame, _session->current_end_frame());
}
}
@@ -885,11 +885,11 @@ Editor::set_timecode_ruler_scale (gdouble lower, gdouble upper)
nframes64_t spacer;
nframes64_t fr;
- if (session == 0) {
+ if (_session == 0) {
return;
}
- fr = session->frame_rate();
+ fr = _session->frame_rate();
if (lower > (spacer = (nframes64_t)(128 * Editor::get_current_zoom ()))) {
lower = lower - spacer;
@@ -899,26 +899,26 @@ Editor::set_timecode_ruler_scale (gdouble lower, gdouble upper)
upper = upper + spacer;
range = (nframes64_t) floor (upper - lower);
- if (range < (2 * session->frames_per_timecode_frame())) { /* 0 - 2 frames */
+ if (range < (2 * _session->frames_per_timecode_frame())) { /* 0 - 2 frames */
timecode_ruler_scale = timecode_show_bits;
timecode_mark_modulo = 20;
- timecode_nmarks = 2 + (2 * session->config.get_subframes_per_frame());
+ timecode_nmarks = 2 + (2 * _session->config.get_subframes_per_frame());
} else if (range <= (fr / 4)) { /* 2 frames - 0.250 second */
timecode_ruler_scale = timecode_show_frames;
timecode_mark_modulo = 1;
- timecode_nmarks = 2 + (range / (nframes64_t)session->frames_per_timecode_frame());
+ timecode_nmarks = 2 + (range / (nframes64_t)_session->frames_per_timecode_frame());
} else if (range <= (fr / 2)) { /* 0.25-0.5 second */
timecode_ruler_scale = timecode_show_frames;
timecode_mark_modulo = 2;
- timecode_nmarks = 2 + (range / (nframes64_t)session->frames_per_timecode_frame());
+ timecode_nmarks = 2 + (range / (nframes64_t)_session->frames_per_timecode_frame());
} else if (range <= fr) { /* 0.5-1 second */
timecode_ruler_scale = timecode_show_frames;
timecode_mark_modulo = 5;
- timecode_nmarks = 2 + (range / (nframes64_t)session->frames_per_timecode_frame());
+ timecode_nmarks = 2 + (range / (nframes64_t)_session->frames_per_timecode_frame());
} else if (range <= 2 * fr) { /* 1-2 seconds */
timecode_ruler_scale = timecode_show_frames;
timecode_mark_modulo = 10;
- timecode_nmarks = 2 + (range / (nframes64_t)session->frames_per_timecode_frame());
+ timecode_nmarks = 2 + (range / (nframes64_t)_session->frames_per_timecode_frame());
} else if (range <= 8 * fr) { /* 2-8 seconds */
timecode_ruler_scale = timecode_show_seconds;
timecode_mark_modulo = 1;
@@ -987,7 +987,7 @@ Editor::metric_get_timecode (GtkCustomRulerMark **marks, gdouble lower, gdouble
gchar buf[16];
gint n;
- if (session == 0) {
+ if (_session == 0) {
return 0;
}
@@ -1004,10 +1004,10 @@ Editor::metric_get_timecode (GtkCustomRulerMark **marks, gdouble lower, gdouble
case timecode_show_bits:
// Find timecode time of this sample (pos) with subframe accuracy
- session->sample_to_timecode(pos, timecode, true /* use_offset */, true /* use_subframes */ );
+ _session->sample_to_timecode(pos, timecode, true /* use_offset */, true /* use_subframes */ );
for (n = 0; n < timecode_nmarks; n++) {
- session->timecode_to_sample(timecode, pos, true /* use_offset */, true /* use_subframes */ );
+ _session->timecode_to_sample(timecode, pos, true /* use_offset */, true /* use_subframes */ );
if ((timecode.subframes % timecode_mark_modulo) == 0) {
if (timecode.subframes == 0) {
(*marks)[n].style = GtkCustomRulerMarkMajor;
@@ -1025,17 +1025,17 @@ Editor::metric_get_timecode (GtkCustomRulerMark **marks, gdouble lower, gdouble
(*marks)[n].position = pos;
// Increment subframes by one
- Timecode::increment_subframes( timecode, session->config.get_subframes_per_frame() );
+ Timecode::increment_subframes( timecode, _session->config.get_subframes_per_frame() );
}
break;
case timecode_show_seconds:
// Find timecode time of this sample (pos)
- session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ );
// Go to next whole second down
Timecode::seconds_floor( timecode );
for (n = 0; n < timecode_nmarks; n++) {
- session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ );
+ _session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ );
if ((timecode.seconds % timecode_mark_modulo) == 0) {
if (timecode.seconds == 0) {
(*marks)[n].style = GtkCustomRulerMarkMajor;
@@ -1052,17 +1052,17 @@ Editor::metric_get_timecode (GtkCustomRulerMark **marks, gdouble lower, gdouble
}
(*marks)[n].label = g_strdup (buf);
- Timecode::increment_seconds( timecode, session->config.get_subframes_per_frame() );
+ Timecode::increment_seconds( timecode, _session->config.get_subframes_per_frame() );
}
break;
case timecode_show_minutes:
// Find timecode time of this sample (pos)
- session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ );
// Go to next whole minute down
Timecode::minutes_floor( timecode );
for (n = 0; n < timecode_nmarks; n++) {
- session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ );
+ _session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ );
if ((timecode.minutes % timecode_mark_modulo) == 0) {
if (timecode.minutes == 0) {
(*marks)[n].style = GtkCustomRulerMarkMajor;
@@ -1077,18 +1077,18 @@ Editor::metric_get_timecode (GtkCustomRulerMark **marks, gdouble lower, gdouble
}
(*marks)[n].label = g_strdup (buf);
(*marks)[n].position = pos;
- Timecode::increment_minutes( timecode, session->config.get_subframes_per_frame() );
+ Timecode::increment_minutes( timecode, _session->config.get_subframes_per_frame() );
}
break;
case timecode_show_hours:
// Find timecode time of this sample (pos)
- session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ );
// Go to next whole hour down
Timecode::hours_floor( timecode );
for (n = 0; n < timecode_nmarks; n++) {
- session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ );
+ _session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ );
if ((timecode.hours % timecode_mark_modulo) == 0) {
(*marks)[n].style = GtkCustomRulerMarkMajor;
snprintf (buf, sizeof(buf), "%s%02u:%02u:%02u:%02u", timecode.negative ? "-" : "", timecode.hours, timecode.minutes, timecode.seconds, timecode.frames);
@@ -1100,17 +1100,17 @@ Editor::metric_get_timecode (GtkCustomRulerMark **marks, gdouble lower, gdouble
(*marks)[n].label = g_strdup (buf);
(*marks)[n].position = pos;
- Timecode::increment_hours( timecode, session->config.get_subframes_per_frame() );
+ Timecode::increment_hours( timecode, _session->config.get_subframes_per_frame() );
}
break;
case timecode_show_frames:
// Find timecode time of this sample (pos)
- session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ );
// Go to next whole frame down
Timecode::frames_floor( timecode );
for (n = 0; n < timecode_nmarks; n++) {
- session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ );
+ _session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ );
if ((timecode.frames % timecode_mark_modulo) == 0) {
if (timecode.frames == 0) {
(*marks)[n].style = GtkCustomRulerMarkMajor;
@@ -1126,7 +1126,7 @@ Editor::metric_get_timecode (GtkCustomRulerMark **marks, gdouble lower, gdouble
}
(*marks)[n].label = g_strdup (buf);
- Timecode::increment( timecode, session->config.get_subframes_per_frame() );
+ Timecode::increment( timecode, _session->config.get_subframes_per_frame() );
}
break;
@@ -1139,14 +1139,14 @@ Editor::metric_get_timecode (GtkCustomRulerMark **marks, gdouble lower, gdouble
void
Editor::compute_bbt_ruler_scale (nframes64_t lower, nframes64_t upper)
{
- if (session == 0) {
+ if (_session == 0) {
return;
}
TempoMap::BBTPointList::iterator i;
BBT_Time lower_beat, upper_beat; // the beats at each end of the ruler
- session->bbt_time((jack_nframes_t) lower, lower_beat);
- session->bbt_time((jack_nframes_t) upper, upper_beat);
+ _session->bbt_time((jack_nframes_t) lower, lower_beat);
+ _session->bbt_time((jack_nframes_t) upper, upper_beat);
uint32_t beats = 0;
bbt_accent_modulo = 1;
@@ -1224,7 +1224,7 @@ Editor::compute_bbt_ruler_scale (nframes64_t lower, nframes64_t upper)
gint
Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upper*/, gint /*maxchars*/)
{
- if (session == 0) {
+ if (_session == 0) {
return 0;
}
@@ -1341,9 +1341,9 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp
next_beat.beats = 1;
}
- next_beat_pos = session->tempo_map().frame_time(next_beat);
+ next_beat_pos = _session->tempo_map().frame_time(next_beat);
- frame_skip = (nframes64_t) floor (frame_skip_error = (session->frame_rate() * 60) / (bbt_beat_subdivision * (*i).tempo->beats_per_minute()));
+ frame_skip = (nframes64_t) floor (frame_skip_error = (_session->frame_rate() * 60) / (bbt_beat_subdivision * (*i).tempo->beats_per_minute()));
frame_skip_error -= frame_skip;
skip = (uint32_t) (Meter::ticks_per_beat / bbt_beat_subdivision);
@@ -1433,9 +1433,9 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp
next_beat.beats = 1;
}
- next_beat_pos = session->tempo_map().frame_time(next_beat);
+ next_beat_pos = _session->tempo_map().frame_time(next_beat);
- frame_skip = (nframes64_t) floor (frame_skip_error = (session->frame_rate() * 60) / (bbt_beat_subdivision * (*i).tempo->beats_per_minute()));
+ frame_skip = (nframes64_t) floor (frame_skip_error = (_session->frame_rate() * 60) / (bbt_beat_subdivision * (*i).tempo->beats_per_minute()));
frame_skip_error -= frame_skip;
skip = (uint32_t) (Meter::ticks_per_beat / bbt_beat_subdivision);
@@ -1530,9 +1530,9 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp
next_beat.beats = 1;
}
- next_beat_pos = session->tempo_map().frame_time(next_beat);
+ next_beat_pos = _session->tempo_map().frame_time(next_beat);
- frame_skip = (nframes64_t) floor (frame_skip_error = (session->frame_rate() * 60) / (bbt_beat_subdivision * (*i).tempo->beats_per_minute()));
+ frame_skip = (nframes64_t) floor (frame_skip_error = (_session->frame_rate() * 60) / (bbt_beat_subdivision * (*i).tempo->beats_per_minute()));
frame_skip_error -= frame_skip;
skip = (uint32_t) (Meter::ticks_per_beat / bbt_beat_subdivision);
@@ -1704,15 +1704,15 @@ Editor::metric_get_frames (GtkCustomRulerMark **marks, gdouble lower, gdouble up
gint nmarks;
gint n;
- if (session == 0) {
+ if (_session == 0) {
return 0;
}
mark_interval = (iupper - ilower) / 5;
- if (mark_interval > session->frame_rate()) {
- mark_interval -= mark_interval % session->frame_rate();
+ if (mark_interval > _session->frame_rate()) {
+ mark_interval -= mark_interval % _session->frame_rate();
} else {
- mark_interval = session->frame_rate() / (session->frame_rate() / mark_interval ) ;
+ mark_interval = _session->frame_rate() / (_session->frame_rate() / mark_interval ) ;
}
nmarks = 5;
*marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * nmarks);
@@ -1765,11 +1765,11 @@ Editor::set_minsec_ruler_scale (gdouble lower, gdouble upper)
nframes64_t fr;
nframes64_t spacer;
- if (session == 0) {
+ if (_session == 0) {
return;
}
- fr = session->frame_rate();
+ fr = _session->frame_rate();
/* to prevent 'flashing' */
if (lower > (spacer = (nframes64_t)(128 * Editor::get_current_zoom ()))) {
@@ -1866,7 +1866,7 @@ Editor::metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble /*
gchar buf[16];
gint n;
- if (session == 0) {
+ if (_session == 0) {
return 0;
}
@@ -1882,7 +1882,7 @@ Editor::metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble /*
switch (minsec_ruler_scale) {
case minsec_show_seconds:
for (n = 0; n < minsec_nmarks; pos += minsec_mark_interval, ++n) {
- sample_to_clock_parts (pos, session->frame_rate(), &hrs, &mins, &secs, &millisecs);
+ sample_to_clock_parts (pos, _session->frame_rate(), &hrs, &mins, &secs, &millisecs);
if (secs % minsec_mark_modulo == 0) {
if (secs == 0) {
(*marks)[n].style = GtkCustomRulerMarkMajor;
@@ -1900,7 +1900,7 @@ Editor::metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble /*
break;
case minsec_show_minutes:
for (n = 0; n < minsec_nmarks; pos += minsec_mark_interval, ++n) {
- sample_to_clock_parts (pos, session->frame_rate(), &hrs, &mins, &secs, &millisecs);
+ sample_to_clock_parts (pos, _session->frame_rate(), &hrs, &mins, &secs, &millisecs);
if (mins % minsec_mark_modulo == 0) {
if (mins == 0) {
(*marks)[n].style = GtkCustomRulerMarkMajor;
@@ -1918,7 +1918,7 @@ Editor::metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble /*
break;
case minsec_show_hours:
for (n = 0; n < minsec_nmarks; pos += minsec_mark_interval, ++n) {
- sample_to_clock_parts (pos, session->frame_rate(), &hrs, &mins, &secs, &millisecs);
+ sample_to_clock_parts (pos, _session->frame_rate(), &hrs, &mins, &secs, &millisecs);
if (hrs % minsec_mark_modulo == 0) {
(*marks)[n].style = GtkCustomRulerMarkMajor;
snprintf (buf, sizeof(buf), "%02ld:%02ld:%02ld.%03ld", hrs, mins, secs, millisecs);
@@ -1932,7 +1932,7 @@ Editor::metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble /*
break;
case minsec_show_frames:
for (n = 0; n < minsec_nmarks; pos += minsec_mark_interval, ++n) {
- sample_to_clock_parts (pos, session->frame_rate(), &hrs, &mins, &secs, &millisecs);
+ sample_to_clock_parts (pos, _session->frame_rate(), &hrs, &mins, &secs, &millisecs);
if (millisecs % minsec_mark_modulo == 0) {
if (secs == 0) {
(*marks)[n].style = GtkCustomRulerMarkMajor;
diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc
index 59c020feae..4e66847ba2 100644
--- a/gtk2_ardour/editor_selection.cc
+++ b/gtk2_ardour/editor_selection.cc
@@ -1037,7 +1037,7 @@ Editor::set_selection_from_punch()
{
Location* location;
- if ((location = session->locations()->auto_punch_location()) == 0) {
+ if ((location = _session->locations()->auto_punch_location()) == 0) {
return;
}
@@ -1049,7 +1049,7 @@ Editor::set_selection_from_loop()
{
Location* location;
- if ((location = session->locations()->auto_loop_location()) == 0) {
+ if ((location = _session->locations()->auto_loop_location()) == 0) {
return;
}
set_selection_from_range (*location);
@@ -1107,7 +1107,7 @@ Editor::select_all_selectables_using_time_selection ()
void
Editor::select_all_selectables_using_punch()
{
- Location* location = session->locations()->auto_punch_location();
+ Location* location = _session->locations()->auto_punch_location();
list<Selectable *> touched;
if (location == 0 || (location->end() - location->start() <= 1)) {
@@ -1138,7 +1138,7 @@ Editor::select_all_selectables_using_punch()
void
Editor::select_all_selectables_using_loop()
{
- Location* location = session->locations()->auto_loop_location();
+ Location* location = _session->locations()->auto_loop_location();
list<Selectable *> touched;
if (location == 0 || (location->end() - location->start() <= 1)) {
@@ -1176,7 +1176,7 @@ Editor::select_all_selectables_using_cursor (EditorCursor *cursor, bool after)
if (after) {
begin_reversible_command (_("select all after cursor"));
start = cursor->current_frame ;
- end = session->current_end_frame();
+ end = _session->current_end_frame();
} else {
if (cursor->current_frame > 0) {
begin_reversible_command (_("select all before cursor"));
@@ -1216,7 +1216,7 @@ Editor::select_all_selectables_using_edit (bool after)
if (after) {
begin_reversible_command (_("select all after edit"));
start = get_preferred_edit_position();
- end = session->current_end_frame();
+ end = _session->current_end_frame();
} else {
if ((end = get_preferred_edit_position()) > 1) {
begin_reversible_command (_("select all before edit"));
@@ -1314,7 +1314,7 @@ Editor::get_edit_op_range (nframes64_t& start, nframes64_t& end) const
}
start = selection->markers.front()->position();
- end = session->audible_frame();
+ end = _session->audible_frame();
} else {
@@ -1323,10 +1323,10 @@ Editor::get_edit_op_range (nframes64_t& start, nframes64_t& end) const
if (selection->markers.empty()) {
/* use mouse + playhead */
start = m;
- end = session->audible_frame();
+ end = _session->audible_frame();
} else {
/* use playhead + selected marker */
- start = session->audible_frame();
+ start = _session->audible_frame();
end = selection->markers.front()->position();
}
break;
@@ -1335,7 +1335,7 @@ Editor::get_edit_op_range (nframes64_t& start, nframes64_t& end) const
/* use mouse + selected marker */
if (selection->markers.empty()) {
start = m;
- end = session->audible_frame();
+ end = _session->audible_frame();
} else {
start = selection->markers.front()->position();
end = m;
diff --git a/gtk2_ardour/editor_snapshots.cc b/gtk2_ardour/editor_snapshots.cc
index 8b544508d7..795ba425ea 100644
--- a/gtk2_ardour/editor_snapshots.cc
+++ b/gtk2_ardour/editor_snapshots.cc
@@ -52,9 +52,9 @@ EditorSnapshots::EditorSnapshots (Editor* e)
}
void
-EditorSnapshots::connect_to_session (Session* s)
+EditorSnapshots::set_session (Session* s)
{
- EditorComponent::connect_to_session (s);
+ EditorComponent::set_session (s);
redisplay ();
}
diff --git a/gtk2_ardour/editor_snapshots.h b/gtk2_ardour/editor_snapshots.h
index 1a17e6de30..5563778aa5 100644
--- a/gtk2_ardour/editor_snapshots.h
+++ b/gtk2_ardour/editor_snapshots.h
@@ -28,7 +28,7 @@ class EditorSnapshots : public EditorComponent
public:
EditorSnapshots (Editor *);
- void connect_to_session (ARDOUR::Session *);
+ void set_session (ARDOUR::Session *);
Gtk::Widget& widget () {
return _scroller;
diff --git a/gtk2_ardour/editor_summary.cc b/gtk2_ardour/editor_summary.cc
index d257889682..b002150622 100644
--- a/gtk2_ardour/editor_summary.cc
+++ b/gtk2_ardour/editor_summary.cc
@@ -54,15 +54,18 @@ EditorSummary::EditorSummary (Editor* e)
* @param s Session.
*/
void
-EditorSummary::connect_to_session (Session* s)
+EditorSummary::set_session (Session* s)
{
- EditorComponent::connect_to_session (s);
+ EditorComponent::set_session (s);
Region::RegionPropertyChanged.connect (sigc::hide (sigc::mem_fun (*this, &EditorSummary::set_dirty)));
- _session_connections.push_back (_session->RegionRemoved.connect (sigc::hide (sigc::mem_fun (*this, &EditorSummary::set_dirty))));
- _session_connections.push_back (_session->StartTimeChanged.connect (sigc::mem_fun (*this, &EditorSummary::set_dirty)));
- _session_connections.push_back (_session->EndTimeChanged.connect (sigc::mem_fun (*this, &EditorSummary::set_dirty)));
+ if (_session) {
+ _session_connections.add_connection (_session->RegionRemoved.connect (boost::bind (&EditorSummary::set_dirty, this)));
+ _session_connections.add_connection (_session->StartTimeChanged.connect (boost::bind (&EditorSummary::set_dirty, this)));
+ _session_connections.add_connection (_session->EndTimeChanged.connect (boost::bind (&EditorSummary::set_dirty, this)));
+ }
+
_editor->playhead_cursor->PositionChanged.connect (sigc::mem_fun (*this, &EditorSummary::playhead_position_changed));
set_dirty ();
diff --git a/gtk2_ardour/editor_summary.h b/gtk2_ardour/editor_summary.h
index e52e24cd99..9d9763996e 100644
--- a/gtk2_ardour/editor_summary.h
+++ b/gtk2_ardour/editor_summary.h
@@ -37,7 +37,7 @@ class EditorSummary : public CairoWidget, public EditorComponent
public:
EditorSummary (Editor *);
- void connect_to_session (ARDOUR::Session *);
+ void set_session (ARDOUR::Session *);
void set_overlays_dirty ();
private:
diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc
index 7fecf61be3..438f18b91e 100644
--- a/gtk2_ardour/editor_tempodisplay.cc
+++ b/gtk2_ardour/editor_tempodisplay.cc
@@ -95,7 +95,7 @@ Editor::draw_metric_marks (const Metrics& metrics)
void
Editor::tempo_map_changed (Change ignored)
{
- if (!session) {
+ if (!_session) {
return;
}
@@ -105,14 +105,14 @@ Editor::tempo_map_changed (Change ignored)
tempo_lines->tempo_map_changed();
compute_current_bbt_points(leftmost_frame, leftmost_frame + current_page_frames());
- session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks); // redraw metric markers
+ _session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks); // redraw metric markers
redraw_measures ();
}
void
Editor::redisplay_tempo (bool immediate_redraw)
{
- if (!session) {
+ if (!_session) {
return;
}
@@ -134,14 +134,14 @@ Editor::redisplay_tempo (bool immediate_redraw)
void
Editor::compute_current_bbt_points (nframes_t leftmost, nframes_t rightmost)
{
- if (!session) {
+ if (!_session) {
return;
}
BBT_Time previous_beat, next_beat; // the beats previous to the leftmost frame and after the rightmost frame
- session->bbt_time(leftmost, previous_beat);
- session->bbt_time(rightmost, next_beat);
+ _session->bbt_time(leftmost, previous_beat);
+ _session->bbt_time(rightmost, next_beat);
if (previous_beat.beats > 1) {
previous_beat.beats -= 1;
@@ -151,7 +151,7 @@ Editor::compute_current_bbt_points (nframes_t leftmost, nframes_t rightmost)
}
previous_beat.ticks = 0;
- if (session->tempo_map().meter_at(rightmost).beats_per_bar () > next_beat.beats + 1) {
+ if (_session->tempo_map().meter_at(rightmost).beats_per_bar () > next_beat.beats + 1) {
next_beat.beats += 1;
} else {
next_beat.bars += 1;
@@ -162,7 +162,7 @@ Editor::compute_current_bbt_points (nframes_t leftmost, nframes_t rightmost)
delete current_bbt_points;
current_bbt_points = 0;
- current_bbt_points = session->tempo_map().get_points (session->tempo_map().frame_time (previous_beat), session->tempo_map().frame_time (next_beat) + 1);
+ current_bbt_points = _session->tempo_map().get_points (_session->tempo_map().frame_time (previous_beat), _session->tempo_map().frame_time (next_beat) + 1);
}
void
@@ -182,7 +182,7 @@ Editor::redraw_measures ()
void
Editor::draw_measures ()
{
- if (session == 0 || _show_measures == false ||
+ if (_session == 0 || _show_measures == false ||
!current_bbt_points || current_bbt_points->empty()) {
return;
}
@@ -197,11 +197,11 @@ Editor::draw_measures ()
void
Editor::mouse_add_new_tempo_event (nframes64_t frame)
{
- if (session == 0) {
+ if (_session == 0) {
return;
}
- TempoMap& map(session->tempo_map());
+ TempoMap& map(_session->tempo_map());
TempoDialog tempo_dialog (map, frame, _("add"));
tempo_dialog.set_position (Gtk::WIN_POS_MOUSE);
@@ -230,7 +230,7 @@ Editor::mouse_add_new_tempo_event (nframes64_t frame)
XMLNode &before = map.get_state();
map.add_tempo (Tempo (bpm,nt), requested);
XMLNode &after = map.get_state();
- session->add_command(new MementoCommand<TempoMap>(map, &before, &after));
+ _session->add_command(new MementoCommand<TempoMap>(map, &before, &after));
commit_reversible_command ();
//map.dump (cerr);
@@ -239,12 +239,12 @@ Editor::mouse_add_new_tempo_event (nframes64_t frame)
void
Editor::mouse_add_new_meter_event (nframes64_t frame)
{
- if (session == 0) {
+ if (_session == 0) {
return;
}
- TempoMap& map(session->tempo_map());
+ TempoMap& map(_session->tempo_map());
MeterDialog meter_dialog (map, frame, _("add"));
meter_dialog.set_position (Gtk::WIN_POS_MOUSE);
@@ -272,7 +272,7 @@ Editor::mouse_add_new_meter_event (nframes64_t frame)
begin_reversible_command (_("add meter mark"));
XMLNode &before = map.get_state();
map.add_meter (Meter (bpb, note_type), requested);
- session->add_command(new MementoCommand<TempoMap>(map, &before, &map.get_state()));
+ _session->add_command(new MementoCommand<TempoMap>(map, &before, &map.get_state()));
commit_reversible_command ();
//map.dump (cerr);
@@ -321,10 +321,10 @@ Editor::edit_meter_section (MeterSection* section)
double note_type = meter_dialog.get_note_type ();
begin_reversible_command (_("replace tempo mark"));
- XMLNode &before = session->tempo_map().get_state();
- session->tempo_map().replace_meter (*section, Meter (bpb, note_type));
- XMLNode &after = session->tempo_map().get_state();
- session->add_command(new MementoCommand<TempoMap>(session->tempo_map(), &before, &after));
+ XMLNode &before = _session->tempo_map().get_state();
+ _session->tempo_map().replace_meter (*section, Meter (bpb, note_type));
+ XMLNode &after = _session->tempo_map().get_state();
+ _session->add_command(new MementoCommand<TempoMap>(_session->tempo_map(), &before, &after));
commit_reversible_command ();
}
@@ -351,15 +351,15 @@ Editor::edit_tempo_section (TempoSection* section)
bpm = max (0.01, bpm);
cerr << "Editing tempo section to be at " << when << endl;
- session->tempo_map().dump (cerr);
+ _session->tempo_map().dump (cerr);
begin_reversible_command (_("replace tempo mark"));
- XMLNode &before = session->tempo_map().get_state();
- session->tempo_map().replace_tempo (*section, Tempo (bpm,nt));
- session->tempo_map().dump (cerr);
- session->tempo_map().move_tempo (*section, when);
- session->tempo_map().dump (cerr);
- XMLNode &after = session->tempo_map().get_state();
- session->add_command (new MementoCommand<TempoMap>(session->tempo_map(), &before, &after));
+ XMLNode &before = _session->tempo_map().get_state();
+ _session->tempo_map().replace_tempo (*section, Tempo (bpm,nt));
+ _session->tempo_map().dump (cerr);
+ _session->tempo_map().move_tempo (*section, when);
+ _session->tempo_map().dump (cerr);
+ XMLNode &after = _session->tempo_map().get_state();
+ _session->add_command (new MementoCommand<TempoMap>(_session->tempo_map(), &before, &after));
commit_reversible_command ();
}
@@ -405,10 +405,10 @@ gint
Editor::real_remove_tempo_marker (TempoSection *section)
{
begin_reversible_command (_("remove tempo mark"));
- XMLNode &before = session->tempo_map().get_state();
- session->tempo_map().remove_tempo (*section);
- XMLNode &after = session->tempo_map().get_state();
- session->add_command(new MementoCommand<TempoMap>(session->tempo_map(), &before, &after));
+ XMLNode &before = _session->tempo_map().get_state();
+ _session->tempo_map().remove_tempo (*section);
+ XMLNode &after = _session->tempo_map().get_state();
+ _session->add_command(new MementoCommand<TempoMap>(_session->tempo_map(), &before, &after));
commit_reversible_command ();
return FALSE;
@@ -439,10 +439,10 @@ gint
Editor::real_remove_meter_marker (MeterSection *section)
{
begin_reversible_command (_("remove tempo mark"));
- XMLNode &before = session->tempo_map().get_state();
- session->tempo_map().remove_meter (*section);
- XMLNode &after = session->tempo_map().get_state();
- session->add_command(new MementoCommand<TempoMap>(session->tempo_map(), &before, &after));
+ XMLNode &before = _session->tempo_map().get_state();
+ _session->tempo_map().remove_meter (*section);
+ XMLNode &after = _session->tempo_map().get_state();
+ _session->add_command(new MementoCommand<TempoMap>(_session->tempo_map(), &before, &after));
commit_reversible_command ();
return FALSE;
diff --git a/gtk2_ardour/editor_timefx.cc b/gtk2_ardour/editor_timefx.cc
index 8538c7b8b3..aab6b67658 100644
--- a/gtk2_ardour/editor_timefx.cc
+++ b/gtk2_ardour/editor_timefx.cc
@@ -77,14 +77,14 @@ Editor::time_stretch (RegionSelection& regions, float fraction)
ARDOUR::TimeFXRequest request;
request.time_fraction = fraction;
- MidiStretch stretch(*session, request);
+ MidiStretch stretch(*_session, request);
begin_reversible_command ("midi stretch");
stretch.run(regions.front()->region());
XMLNode &before = playlist->get_state();
playlist->replace_region (regions.front()->region(), stretch.results[0],
regions.front()->region()->position());
XMLNode &after = playlist->get_state();
- session->add_command (new MementoCommand<Playlist>(*playlist, &before, &after));
+ _session->add_command (new MementoCommand<Playlist>(*playlist, &before, &after));
commit_reversible_command ();
}
@@ -291,12 +291,12 @@ Editor::do_timefx (TimeFXDialog& dialog)
Filter* fx;
if (dialog.pitching) {
- fx = new Pitch (*session, dialog.request);
+ fx = new Pitch (*_session, dialog.request);
} else {
#ifdef USE_RUBBERBAND
- fx = new RBStretch (*session, dialog.request);
+ fx = new RBStretch (*_session, dialog.request);
#else
- fx = new STStretch (*session, dialog.request);
+ fx = new STStretch (*_session, dialog.request);
#endif
}
@@ -311,14 +311,14 @@ Editor::do_timefx (TimeFXDialog& dialog)
new_region = fx->results.front();
if (!in_command) {
- session->begin_reversible_command (dialog.pitching ? _("pitch shift") : _("time stretch"));
+ _session->begin_reversible_command (dialog.pitching ? _("pitch shift") : _("time stretch"));
in_command = true;
}
XMLNode &before = playlist->get_state();
playlist->replace_region (region, new_region, region->position());
XMLNode &after = playlist->get_state();
- session->add_command (new MementoCommand<Playlist>(*playlist, &before, &after));
+ _session->add_command (new MementoCommand<Playlist>(*playlist, &before, &after));
}
i = tmp;
@@ -326,7 +326,7 @@ Editor::do_timefx (TimeFXDialog& dialog)
}
if (in_command) {
- session->commit_reversible_command ();
+ _session->commit_reversible_command ();
}
dialog.status = 0;
diff --git a/gtk2_ardour/export_channel_selector.cc b/gtk2_ardour/export_channel_selector.cc
index 17f2ad59ea..74a18b9770 100644
--- a/gtk2_ardour/export_channel_selector.cc
+++ b/gtk2_ardour/export_channel_selector.cc
@@ -108,11 +108,11 @@ void
PortExportChannelSelector::fill_route_list ()
{
channel_view.clear_routes ();
- RouteList routes = *session->get_routes();
+ RouteList routes = *_session->get_routes();
/* Add master bus and then everything else */
- ARDOUR::IO* master = session->master_out()->output().get();
+ ARDOUR::IO* master = _session->master_out()->output().get();
channel_view.add_route (master);
for (RouteList::iterator it = routes.begin(); it != routes.end(); ++it) {
@@ -435,11 +435,11 @@ PortExportChannelSelector::ChannelTreeView::update_selection_text (Glib::ustring
update_config ();
}
-RegionExportChannelSelector::RegionExportChannelSelector (ARDOUR::Session * session,
+RegionExportChannelSelector::RegionExportChannelSelector (ARDOUR::Session * _session,
ProfileManagerPtr manager,
ARDOUR::AudioRegion const & region,
ARDOUR::AudioTrack & track) :
- ExportChannelSelector (session, manager),
+ ExportChannelSelector (_session, manager),
region (region),
track (track),
region_chans (region.n_channels()),
@@ -485,11 +485,11 @@ RegionExportChannelSelector::handle_selection ()
state->config->clear_channels ();
if (raw_button.get_active ()) {
- factory.reset (new RegionExportChannelFactory (session, region, track, RegionExportChannelFactory::Raw));
+ factory.reset (new RegionExportChannelFactory (_session, region, track, RegionExportChannelFactory::Raw));
} else if (fades_button.get_active ()) {
- factory.reset (new RegionExportChannelFactory (session, region, track, RegionExportChannelFactory::Fades));
+ factory.reset (new RegionExportChannelFactory (_session, region, track, RegionExportChannelFactory::Fades));
} else if (processed_button.get_active ()) {
- factory.reset (new RegionExportChannelFactory(session, region, track, RegionExportChannelFactory::Processed));
+ factory.reset (new RegionExportChannelFactory(_session, region, track, RegionExportChannelFactory::Processed));
} else {
CriticalSelectionChanged ();
return;
diff --git a/gtk2_ardour/export_channel_selector.h b/gtk2_ardour/export_channel_selector.h
index 56ce5c9501..6a1c4252a4 100644
--- a/gtk2_ardour/export_channel_selector.h
+++ b/gtk2_ardour/export_channel_selector.h
@@ -43,19 +43,18 @@ namespace ARDOUR {
class XMLNode;
-class ExportChannelSelector : public Gtk::HBox
+class ExportChannelSelector : public Gtk::HBox, public ARDOUR::SessionHandlePtr
{
protected:
typedef boost::shared_ptr<ARDOUR::ExportChannelConfiguration> ChannelConfigPtr;
typedef boost::shared_ptr<ARDOUR::ExportProfileManager> ProfileManagerPtr;
- ARDOUR::Session * session;
ProfileManagerPtr manager;
public:
ExportChannelSelector (ARDOUR::Session * session, ProfileManagerPtr manager)
- : session (session)
- , manager (manager)
+ : SessionHandlePtr (session)
+ , manager (manager)
{}
virtual ~ExportChannelSelector () {}
diff --git a/gtk2_ardour/export_dialog.cc b/gtk2_ardour/export_dialog.cc
index c0e595fd00..1ec466d449 100644
--- a/gtk2_ardour/export_dialog.cc
+++ b/gtk2_ardour/export_dialog.cc
@@ -45,22 +45,26 @@ ExportDialog::~ExportDialog ()
void
ExportDialog::set_session (ARDOUR::Session* s)
{
- session = s;
+ SessionHandlePtr::set_session (s);
+
+ if (!_session) {
+ return;
+ }
/* Init handler and profile manager */
- handler = session->get_export_handler ();
- status = session->get_export_status ();
- profile_manager.reset (new ExportProfileManager (*session));
+ handler = _session->get_export_handler ();
+ status = _session->get_export_status ();
+ profile_manager.reset (new ExportProfileManager (*_session));
/* Possibly init stuff in derived classes */
init ();
- /* Rest of session related initialization */
+ /* Rest of _session related initialization */
preset_selector->set_manager (profile_manager);
- file_notebook->set_session_and_manager (session, profile_manager);
+ file_notebook->set_session_and_manager (_session, profile_manager);
/* Hand on selection range to profile manager */
@@ -177,8 +181,8 @@ void
ExportDialog::init_components ()
{
preset_selector.reset (new ExportPresetSelector ());
- timespan_selector.reset (new ExportTimespanSelectorMultiple (session, profile_manager));
- channel_selector.reset (new PortExportChannelSelector (session, profile_manager));
+ timespan_selector.reset (new ExportTimespanSelectorMultiple (_session, profile_manager));
+ channel_selector.reset (new PortExportChannelSelector (_session, profile_manager));
file_notebook.reset (new ExportFileNotebook ());
}
@@ -372,8 +376,8 @@ void
ExportRangeDialog::init_components ()
{
preset_selector.reset (new ExportPresetSelector ());
- timespan_selector.reset (new ExportTimespanSelectorSingle (session, profile_manager, range_id));
- channel_selector.reset (new PortExportChannelSelector (session, profile_manager));
+ timespan_selector.reset (new ExportTimespanSelectorSingle (_session, profile_manager, range_id));
+ channel_selector.reset (new PortExportChannelSelector (_session, profile_manager));
file_notebook.reset (new ExportFileNotebook ());
}
@@ -385,8 +389,8 @@ void
ExportSelectionDialog::init_components ()
{
preset_selector.reset (new ExportPresetSelector ());
- timespan_selector.reset (new ExportTimespanSelectorSingle (session, profile_manager, X_("selection")));
- channel_selector.reset (new PortExportChannelSelector (session, profile_manager));
+ timespan_selector.reset (new ExportTimespanSelectorSingle (_session, profile_manager, X_("selection")));
+ channel_selector.reset (new PortExportChannelSelector (_session, profile_manager));
file_notebook.reset (new ExportFileNotebook ());
}
@@ -410,7 +414,7 @@ ExportRegionDialog::init_components ()
Glib::ustring loc_id = profile_manager->set_single_range (region.position(), region.position() + region.length(), region.name());
preset_selector.reset (new ExportPresetSelector ());
- timespan_selector.reset (new ExportTimespanSelectorSingle (session, profile_manager, loc_id));
- channel_selector.reset (new RegionExportChannelSelector (session, profile_manager, region, track));
+ timespan_selector.reset (new ExportTimespanSelectorSingle (_session, profile_manager, loc_id));
+ channel_selector.reset (new RegionExportChannelSelector (_session, profile_manager, region, track));
file_notebook.reset (new ExportFileNotebook ());
}
diff --git a/gtk2_ardour/export_file_notebook.cc b/gtk2_ardour/export_file_notebook.cc
index ab9a22ee28..93a78cdad2 100644
--- a/gtk2_ardour/export_file_notebook.cc
+++ b/gtk2_ardour/export_file_notebook.cc
@@ -49,7 +49,7 @@ ExportFileNotebook::ExportFileNotebook () :
void
ExportFileNotebook::set_session_and_manager (ARDOUR::Session * s, boost::shared_ptr<ARDOUR::ExportProfileManager> manager)
{
- session = s;
+ SessionHandlePtr::set_session (s);
profile_manager = manager;
sync_with_manager ();
@@ -110,7 +110,7 @@ ExportFileNotebook::add_new_file_page ()
void
ExportFileNotebook::add_file_page (ARDOUR::ExportProfileManager::FormatStatePtr format_state, ARDOUR::ExportProfileManager::FilenameStatePtr filename_state)
{
- FilePage * page = Gtk::manage (new FilePage (session, profile_manager, this, page_counter, format_state, filename_state));
+ FilePage * page = Gtk::manage (new FilePage (_session, profile_manager, this, page_counter, format_state, filename_state));
page->CriticalSelectionChanged.connect (CriticalSelectionChanged.make_slot());
insert_page (*page, page->get_tab_widget(), get_n_pages() - 1);
diff --git a/gtk2_ardour/export_file_notebook.h b/gtk2_ardour/export_file_notebook.h
index 4eed7dc200..720c3b4bfd 100644
--- a/gtk2_ardour/export_file_notebook.h
+++ b/gtk2_ardour/export_file_notebook.h
@@ -25,16 +25,12 @@
#include <gtkmm.h>
#include "ardour/export_profile_manager.h"
+#include "ardour/session_handle.h"
#include "export_format_selector.h"
#include "export_filename_selector.h"
-namespace ARDOUR {
- class Session;
-}
-
-
-class ExportFileNotebook : public Gtk::Notebook
+class ExportFileNotebook : public Gtk::Notebook, public ARDOUR::SessionHandlePtr
{
public:
@@ -55,7 +51,6 @@ class ExportFileNotebook : public Gtk::Notebook
class FilePage;
ManagerPtr profile_manager;
- ARDOUR::Session * session;
void add_new_file_page ();
void add_file_page (ARDOUR::ExportProfileManager::FormatStatePtr format_state, ARDOUR::ExportProfileManager::FilenameStatePtr filename_state);
diff --git a/gtk2_ardour/export_filename_selector.cc b/gtk2_ardour/export_filename_selector.cc
index 30a7fbce7f..abd057414a 100644
--- a/gtk2_ardour/export_filename_selector.cc
+++ b/gtk2_ardour/export_filename_selector.cc
@@ -29,16 +29,14 @@
using namespace ARDOUR;
ExportFilenameSelector::ExportFilenameSelector () :
- session (0),
-
- include_label (_("Include in Filename(s):"), Gtk::ALIGN_LEFT),
-
- label_label (_("Label:"), Gtk::ALIGN_LEFT),
- session_checkbox (_("Session Name")),
- revision_checkbox (_("Revision:")),
-
- path_label (_("Folder:"), Gtk::ALIGN_LEFT),
- browse_button (_("Browse"))
+ include_label (_("Include in Filename(s):"), Gtk::ALIGN_LEFT),
+
+ label_label (_("Label:"), Gtk::ALIGN_LEFT),
+ session_checkbox (_("Session Name")),
+ revision_checkbox (_("Revision:")),
+
+ path_label (_("Folder:"), Gtk::ALIGN_LEFT),
+ browse_button (_("Browse"))
{
pack_start (include_label, false, false, 6);
pack_start (include_hbox, false, false, 0);
@@ -136,7 +134,7 @@ ExportFilenameSelector::load_state ()
void
ExportFilenameSelector::set_state (ARDOUR::ExportProfileManager::FilenameStatePtr state_, ARDOUR::Session * session_)
{
- session = session_;
+ SessionHandlePtr::set_session (session_);
filename = state_->filename;
diff --git a/gtk2_ardour/export_filename_selector.h b/gtk2_ardour/export_filename_selector.h
index a6c36da83d..cfe909a46b 100644
--- a/gtk2_ardour/export_filename_selector.h
+++ b/gtk2_ardour/export_filename_selector.h
@@ -25,13 +25,11 @@
#include "ardour/export_profile_manager.h"
#include "ardour/export_filename.h"
-
-namespace ARDOUR {
- class Session;
-}
+#include "ardour/session_handle.h"
///
-class ExportFilenameSelector : public Gtk::VBox {
+class ExportFilenameSelector : public Gtk::VBox, public ARDOUR::SessionHandlePtr
+{
public:
typedef boost::shared_ptr<ARDOUR::ExportFilename> FilenamePtr;
@@ -60,7 +58,6 @@ class ExportFilenameSelector : public Gtk::VBox {
void open_browse_dialog ();
- ARDOUR::Session * session;
boost::shared_ptr<ARDOUR::ExportFilename> filename;
Glib::RefPtr<Gtk::SizeGroup> label_sizegroup;
diff --git a/gtk2_ardour/export_format_dialog.cc b/gtk2_ardour/export_format_dialog.cc
index 770e46de4b..05c1759867 100644
--- a/gtk2_ardour/export_format_dialog.cc
+++ b/gtk2_ardour/export_format_dialog.cc
@@ -194,14 +194,14 @@ ExportFormatDialog::revert ()
void
ExportFormatDialog::set_session (ARDOUR::Session* s)
{
- session = s;
- if (!session) {
- return;
- }
-
+ SessionHandlePtr::set_session (s);
silence_start_clock.set_session (s);
silence_end_clock.set_session (s);
+ if (!_session) {
+ return;
+ }
+
update_clock (silence_start_clock, silence_start);
update_clock (silence_end_clock, silence_end);
@@ -210,7 +210,7 @@ ExportFormatDialog::set_session (ARDOUR::Session* s)
if (sample_rate_view.get_selection()->count_selected_rows() == 0) {
Gtk::ListStore::Children::iterator it;
for (it = sample_rate_list->children().begin(); it != sample_rate_list->children().end(); ++it) {
- if ((nframes_t) (*it)->get_value (sample_rate_cols.ptr)->rate == session->nominal_frame_rate()) {
+ if ((nframes_t) (*it)->get_value (sample_rate_cols.ptr)->rate == _session->nominal_frame_rate()) {
sample_rate_view.get_selection()->select (it);
break;
}
@@ -586,8 +586,8 @@ ExportFormatDialog::change_sample_rate_selection (bool select, WeakSampleRatePtr
if (select) {
ExportFormatManager::SampleRatePtr ptr = rate.lock();
- if (ptr && session) {
- src_quality_combo.set_sensitive ((uint32_t) ptr->rate != session->frame_rate());
+ if (ptr && _session) {
+ src_quality_combo.set_sensitive ((uint32_t) ptr->rate != _session->frame_rate());
}
}
}
@@ -728,7 +728,7 @@ void
ExportFormatDialog::update_clock (AudioClock & clock, ARDOUR::AnyTime const & time)
{
// TODO position
- clock.set (session->convert_to_frames_at (0, time), true);
+ clock.set (_session->convert_to_frames_at (0, time), true);
AudioClock::Mode mode(AudioClock::Timecode);
@@ -753,7 +753,7 @@ ExportFormatDialog::update_clock (AudioClock & clock, ARDOUR::AnyTime const & ti
void
ExportFormatDialog::update_time (AnyTime & time, AudioClock const & clock)
{
- if (!session) {
+ if (!_session) {
return;
}
@@ -762,15 +762,15 @@ ExportFormatDialog::update_time (AnyTime & time, AudioClock const & clock)
switch (clock.mode()) {
case AudioClock::Timecode:
time.type = AnyTime::Timecode;
- session->timecode_time (frames, time.timecode);
+ _session->timecode_time (frames, time.timecode);
break;
case AudioClock::BBT:
time.type = AnyTime::BBT;
- session->bbt_time (frames, time.bbt);
+ _session->bbt_time (frames, time.bbt);
break;
case AudioClock::MinSec:
time.type = AnyTime::Seconds;
- time.seconds = (double) frames / session->frame_rate();
+ time.seconds = (double) frames / _session->frame_rate();
break;
case AudioClock::Frames:
time.type = AnyTime::Frames;
diff --git a/gtk2_ardour/export_format_selector.cc b/gtk2_ardour/export_format_selector.cc
index 002edaf50c..6b1f75987e 100644
--- a/gtk2_ardour/export_format_selector.cc
+++ b/gtk2_ardour/export_format_selector.cc
@@ -65,7 +65,8 @@ ExportFormatSelector::~ExportFormatSelector ()
void
ExportFormatSelector::set_state (ARDOUR::ExportProfileManager::FormatStatePtr const state_, ARDOUR::Session * session_)
{
- session = session_;
+ SessionHandlePtr::set_session (session_);
+
state = state_;
update_format_list ();
@@ -141,7 +142,7 @@ int
ExportFormatSelector::open_edit_dialog (bool new_dialog)
{
ExportFormatDialog dialog (state->format, new_dialog);
- dialog.set_session (session);
+ dialog.set_session (_session);
Gtk::ResponseType response = (Gtk::ResponseType) dialog.run();
if (response == Gtk::RESPONSE_APPLY) {
update_format_description ();
diff --git a/gtk2_ardour/export_format_selector.h b/gtk2_ardour/export_format_selector.h
index 46d9bc3f06..6e1dd52786 100644
--- a/gtk2_ardour/export_format_selector.h
+++ b/gtk2_ardour/export_format_selector.h
@@ -27,14 +27,16 @@
#include <sigc++/signal.h>
#include <boost/shared_ptr.hpp>
+#include "ardour/session_handle.h"
+
namespace ARDOUR {
- class Session;
class ExportFormatSpecification;
class ExportProfileManager;
}
///
-class ExportFormatSelector : public Gtk::HBox {
+class ExportFormatSelector : public Gtk::HBox, public ARDOUR::SessionHandlePtr
+{
private:
@@ -67,7 +69,6 @@ class ExportFormatSelector : public Gtk::HBox {
void update_format_description ();
ARDOUR::ExportProfileManager::FormatStatePtr state;
- ARDOUR::Session * session;
/*** GUI componenets ***/
diff --git a/gtk2_ardour/export_timespan_selector.cc b/gtk2_ardour/export_timespan_selector.cc
index 30515d45fd..9f39fa556c 100644
--- a/gtk2_ardour/export_timespan_selector.cc
+++ b/gtk2_ardour/export_timespan_selector.cc
@@ -41,10 +41,10 @@ using namespace ARDOUR;
using namespace PBD;
ExportTimespanSelector::ExportTimespanSelector (ARDOUR::Session * session, ProfileManagerPtr manager) :
- session (session),
- manager (manager),
- time_format_label (_("Show Times as:"), Gtk::ALIGN_LEFT)
+ manager (manager),
+ time_format_label (_("Show Times as:"), Gtk::ALIGN_LEFT)
{
+ set_session (session);
option_hbox.pack_start (time_format_label, false, false, 0);
option_hbox.pack_start (time_format_combo, false, false, 6);
@@ -100,7 +100,7 @@ ExportTimespanSelector::~ExportTimespanSelector ()
void
ExportTimespanSelector::add_range_to_selection (ARDOUR::Location const * loc)
{
- TimespanPtr span = session->get_export_handler()->add_timespan();
+ TimespanPtr span = _session->get_export_handler()->add_timespan();
Glib::ustring id;
if (loc == state->session_range.get()) {
@@ -201,14 +201,14 @@ ExportTimespanSelector::construct_label (ARDOUR::Location const * location) cons
Glib::ustring
ExportTimespanSelector::bbt_str (nframes_t frames) const
{
- if (!session) {
+ if (!_session) {
return "Error!";
}
std::ostringstream oss;
BBT_Time time;
- session->bbt_time (frames, time);
+ _session->bbt_time (frames, time);
oss << std::setfill('0') << std::right <<
std::setw(3) <<
@@ -224,14 +224,14 @@ ExportTimespanSelector::bbt_str (nframes_t frames) const
Glib::ustring
ExportTimespanSelector::timecode_str (nframes_t frames) const
{
- if (!session) {
+ if (!_session) {
return "Error!";
}
std::ostringstream oss;
Timecode::Time time;
- session->timecode_time (frames, time);
+ _session->timecode_time (frames, time);
oss << std::setfill('0') << std::right <<
std::setw(2) <<
@@ -249,7 +249,7 @@ ExportTimespanSelector::timecode_str (nframes_t frames) const
Glib::ustring
ExportTimespanSelector::ms_str (nframes_t frames) const
{
- if (!session) {
+ if (!_session) {
return "Error!";
}
@@ -261,13 +261,13 @@ ExportTimespanSelector::ms_str (nframes_t frames) const
int sec_promilles;
left = frames;
- hrs = (int) floor (left / (session->frame_rate() * 60.0f * 60.0f));
- left -= (nframes_t) floor (hrs * session->frame_rate() * 60.0f * 60.0f);
- mins = (int) floor (left / (session->frame_rate() * 60.0f));
- left -= (nframes_t) floor (mins * session->frame_rate() * 60.0f);
- secs = (int) floor (left / (float) session->frame_rate());
- left -= (nframes_t) floor (secs * session->frame_rate());
- sec_promilles = (int) (left * 1000 / (float) session->frame_rate() + 0.5);
+ hrs = (int) floor (left / (_session->frame_rate() * 60.0f * 60.0f));
+ left -= (nframes_t) floor (hrs * _session->frame_rate() * 60.0f * 60.0f);
+ mins = (int) floor (left / (_session->frame_rate() * 60.0f));
+ left -= (nframes_t) floor (mins * _session->frame_rate() * 60.0f);
+ secs = (int) floor (left / (float) _session->frame_rate());
+ left -= (nframes_t) floor (secs * _session->frame_rate());
+ sec_promilles = (int) (left * 1000 / (float) _session->frame_rate() + 0.5);
oss << std::setfill('0') << std::right <<
std::setw(2) <<
@@ -294,8 +294,8 @@ ExportTimespanSelector::update_range_name (Glib::ustring const & path, Glib::ust
/*** ExportTimespanSelectorSingle ***/
ExportTimespanSelectorSingle::ExportTimespanSelectorSingle (ARDOUR::Session * session, ProfileManagerPtr manager, Glib::ustring range_id) :
- ExportTimespanSelector (session, manager),
- range_id (range_id)
+ ExportTimespanSelector (session, manager),
+ range_id (range_id)
{
range_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_NEVER);
range_view.append_column_editable ("", range_cols.name);
diff --git a/gtk2_ardour/export_timespan_selector.h b/gtk2_ardour/export_timespan_selector.h
index ad57aac344..5d299e1e52 100644
--- a/gtk2_ardour/export_timespan_selector.h
+++ b/gtk2_ardour/export_timespan_selector.h
@@ -30,19 +30,20 @@
#include <boost/shared_ptr.hpp>
#include "ardour/types.h"
+#include "ardour/session_handle.h"
#include "ardour/export_profile_manager.h"
namespace ARDOUR {
class Location;
class ExportTimespan;
class ExportHandler;
- class Session;
}
using ARDOUR::CDMarkerFormat;
/// Timespan Selector base
-class ExportTimespanSelector : public Gtk::VBox {
+class ExportTimespanSelector : public Gtk::VBox, public ARDOUR::SessionHandlePtr
+{
protected:
typedef std::list<ARDOUR::Location *> LocationList;
typedef boost::shared_ptr<ARDOUR::ExportHandler> HandlerPtr;
@@ -65,7 +66,6 @@ class ExportTimespanSelector : public Gtk::VBox {
protected:
- ARDOUR::Session * session;
ProfileManagerPtr manager;
TimespanStatePtr state;
diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc
index 950071ba13..26036f6e66 100644
--- a/gtk2_ardour/gain_meter.cc
+++ b/gtk2_ardour/gain_meter.cc
@@ -74,13 +74,11 @@ GainMeter::setup_slider_pix ()
}
}
-GainMeterBase::GainMeterBase (Session& s,
+GainMeterBase::GainMeterBase (Session* s,
const Glib::RefPtr<Gdk::Pixbuf>& pix,
bool horizontal,
int fader_length)
- : _session (s)
- // 0.781787 is the value needed for gain to be set to 0.
- , gain_adjustment (0.781787, 0.0, 1.0, 0.01, 0.1)
+ : gain_adjustment (0.781787, 0.0, 1.0, 0.01, 0.1) // 0.781787 is the value needed for gain to be set to 0.
, gain_automation_style_button ("")
, gain_automation_state_button ("")
, dpi_changed (false)
@@ -89,6 +87,8 @@ GainMeterBase::GainMeterBase (Session& s,
{
using namespace Menu_Helpers;
+ set_session (s);
+
ignore_toggle = false;
meter_menu = 0;
next_release_selects = false;
@@ -170,6 +170,7 @@ GainMeterBase::set_controls (boost::shared_ptr<Route> r,
boost::shared_ptr<Amp> amp)
{
connections.clear ();
+ model_connections.drop_connections ();
if (!pm && !amp) {
level_meter->set_meter (0);
@@ -224,14 +225,14 @@ GainMeterBase::set_controls (boost::shared_ptr<Route> r,
connections.push_back (gain_automation_state_button.signal_button_press_event().connect (sigc::mem_fun(*this, &GainMeterBase::gain_automation_state_button_event), false));
boost::shared_ptr<AutomationControl> gc = amp->gain_control();
-
- connections.push_back (gc->alist()->automation_state_changed.connect (sigc::mem_fun(*this, &GainMeter::gain_automation_state_changed)));
- connections.push_back (gc->alist()->automation_style_changed.connect (sigc::mem_fun(*this, &GainMeter::gain_automation_style_changed)));
-
+
+ model_connections.add_connection (gc->alist()->automation_state_changed.connect (boost::bind (&GainMeter::gain_automation_state_changed, this)));
+ model_connections.add_connection (gc->alist()->automation_style_changed.connect (boost::bind (&GainMeter::gain_automation_style_changed, this)));
+
gain_automation_state_changed ();
}
-
- connections.push_back (amp->gain_control()->Changed.connect (sigc::mem_fun (*this, &GainMeterBase::gain_changed)));
+
+ model_connections.add_connection (amp->gain_control()->Changed.connect (boost::bind (&GainMeterBase::gain_changed, this)));
gain_changed ();
show_gain ();
@@ -518,7 +519,7 @@ GainMeterBase::meter_press(GdkEventButton* ev)
/* Primary+Tertiary-click applies change to all routes */
- _session.foreach_route (this, &GainMeterBase::set_meter_point, next_meter_point (_route->meter_point()));
+ _session->foreach_route (this, &GainMeterBase::set_meter_point, next_meter_point (_route->meter_point()));
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
@@ -787,7 +788,7 @@ GainMeterBase::on_theme_changed()
style_changed = true;
}
-GainMeter::GainMeter (Session& s, int fader_length)
+GainMeter::GainMeter (Session* s, int fader_length)
: GainMeterBase (s, slider, false, fader_length)
{
gain_display_box.set_homogeneous (true);
diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h
index 448e0239fe..16c818dead 100644
--- a/gtk2_ardour/gain_meter.h
+++ b/gtk2_ardour/gain_meter.h
@@ -32,11 +32,14 @@
#include <gtkmm/drawingarea.h>
#include <gdkmm/colormap.h>
+#include "pbd/scoped_connections.h"
+
#include "ardour/types.h"
+#include "ardour/session_handle.h"
-#include <gtkmm2ext/click_box.h>
-#include <gtkmm2ext/focus_entry.h>
-#include <gtkmm2ext/slider_controller.h>
+#include "gtkmm2ext/click_box.h"
+#include "gtkmm2ext/focus_entry.h"
+#include "gtkmm2ext/slider_controller.h"
#include "enums.h"
#include "level_meter.h"
@@ -58,10 +61,10 @@ namespace Gtk {
class Menu;
}
-class GainMeterBase : virtual public sigc::trackable
+class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr
{
public:
- GainMeterBase (ARDOUR::Session&, const Glib::RefPtr<Gdk::Pixbuf>& pix,
+ GainMeterBase (ARDOUR::Session*, const Glib::RefPtr<Gdk::Pixbuf>& pix,
bool horizontal, int);
virtual ~GainMeterBase ();
@@ -90,8 +93,8 @@ class GainMeterBase : virtual public sigc::trackable
boost::shared_ptr<ARDOUR::Route> _route;
boost::shared_ptr<ARDOUR::PeakMeter> _meter;
boost::shared_ptr<ARDOUR::Amp> _amp;
- ARDOUR::Session& _session;
std::vector<sigc::connection> connections;
+ PBD::ScopedConnectionList model_connections;
bool ignore_toggle;
bool next_release_selects;
@@ -180,7 +183,7 @@ class GainMeterBase : virtual public sigc::trackable
class GainMeter : public GainMeterBase, public Gtk::VBox
{
public:
- GainMeter (ARDOUR::Session&, int);
+ GainMeter (ARDOUR::Session*, int);
~GainMeter () {}
virtual void set_controls (boost::shared_ptr<ARDOUR::Route> route,
diff --git a/gtk2_ardour/ghostregion.cc b/gtk2_ardour/ghostregion.cc
index 9fb0deb98a..c7a10636ff 100644
--- a/gtk2_ardour/ghostregion.cc
+++ b/gtk2_ardour/ghostregion.cc
@@ -34,6 +34,8 @@ using namespace Editing;
using namespace ArdourCanvas;
using namespace ARDOUR;
+boost::signals2::signal<void(GhostRegion*)> GhostRegion::GoingAway;
+
GhostRegion::GhostRegion (ArdourCanvas::Group* parent, TimeAxisView& tv, TimeAxisView& source_tv, double initial_pos)
: trackview (tv)
, source_trackview (source_tv)
diff --git a/gtk2_ardour/ghostregion.h b/gtk2_ardour/ghostregion.h
index b28607e6f2..0932594a6f 100644
--- a/gtk2_ardour/ghostregion.h
+++ b/gtk2_ardour/ghostregion.h
@@ -21,8 +21,8 @@
#define __ardour_gtk_ghost_region_h__
#include <vector>
-#include <sigc++/signal.h>
#include <libgnomecanvasmm.h>
+#include <boost/signals2.hpp>
#include "canvas.h"
namespace Gnome {
@@ -37,7 +37,7 @@ namespace Gnome {
class MidiStreamView;
class TimeAxisView;
-class GhostRegion : public sigc::trackable
+class GhostRegion
{
public:
GhostRegion(ArdourCanvas::Group* parent, TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos);
@@ -52,12 +52,12 @@ public:
guint source_track_color(unsigned char alpha = 0xff);
bool is_automation_ghost();
- sigc::signal<void,GhostRegion*> GoingAway;
-
TimeAxisView& trackview;
TimeAxisView& source_trackview;
ArdourCanvas::Group* group;
ArdourCanvas::SimpleRect* base_rect;
+
+ static boost::signals2::signal<void(GhostRegion*)> GoingAway;
};
class AudioGhostRegion : public GhostRegion {
diff --git a/gtk2_ardour/group_tabs.cc b/gtk2_ardour/group_tabs.cc
index 013df4255a..3a7206c9d4 100644
--- a/gtk2_ardour/group_tabs.cc
+++ b/gtk2_ardour/group_tabs.cc
@@ -40,11 +40,13 @@ GroupTabs::GroupTabs (Editor* e)
}
void
-GroupTabs::connect_to_session (Session* s)
+GroupTabs::set_session (Session* s)
{
- EditorComponent::connect_to_session (s);
+ EditorComponent::set_session (s);
- _session_connections.push_back (_session->RouteGroupChanged.connect (sigc::mem_fun (*this, &GroupTabs::set_dirty)));
+ if (_session) {
+ _session_connections.add_connection (_session->RouteGroupChanged.connect (boost::bind (&GroupTabs::set_dirty, this)));
+ }
}
diff --git a/gtk2_ardour/group_tabs.h b/gtk2_ardour/group_tabs.h
index bb764a02a5..dbe3174f1b 100644
--- a/gtk2_ardour/group_tabs.h
+++ b/gtk2_ardour/group_tabs.h
@@ -36,7 +36,7 @@ class GroupTabs : public CairoWidget, public EditorComponent
public:
GroupTabs (Editor *);
- void connect_to_session (ARDOUR::Session *);
+ void set_session (ARDOUR::Session *);
protected:
diff --git a/gtk2_ardour/imageframe_socket_handler.cc b/gtk2_ardour/imageframe_socket_handler.cc
index 3d85eda5d4..dc9188db1b 100644
--- a/gtk2_ardour/imageframe_socket_handler.cc
+++ b/gtk2_ardour/imageframe_socket_handler.cc
@@ -1617,7 +1617,7 @@ ImageFrameSocketHandler::handle_rename_marker_view(const char* msg)
void
ImageFrameSocketHandler::handle_session_name_request(const char* msg)
{
- ARDOUR::Session* currentSession = thePublicEditor.current_session() ;
+ ARDOUR::Session* currentSession = thePublicEditor.session() ;
if(currentSession == 0)
{
diff --git a/gtk2_ardour/imageframe_time_axis.cc b/gtk2_ardour/imageframe_time_axis.cc
index 91a4b768fd..9e1eef2b2e 100644
--- a/gtk2_ardour/imageframe_time_axis.cc
+++ b/gtk2_ardour/imageframe_time_axis.cc
@@ -57,7 +57,7 @@ using namespace Gtk;
* @param sess the current session
* @param canvas the parent canvas item
*/
-ImageFrameTimeAxis::ImageFrameTimeAxis(const string & track_id, PublicEditor& ed, ARDOUR::Session& sess, ArdourCanvas::Canvas& canvas)
+ImageFrameTimeAxis::ImageFrameTimeAxis(const string & track_id, PublicEditor& ed, ARDOUR::Session* sess, ArdourCanvas::Canvas& canvas)
: AxisView(sess),
VisualTimeAxis(track_id, ed, sess, canvas)
{
@@ -89,7 +89,7 @@ ImageFrameTimeAxis::ImageFrameTimeAxis(const string & track_id, PublicEditor& ed
*/
ImageFrameTimeAxis::~ImageFrameTimeAxis ()
{
- GoingAway() ; /* EMIT_SIGNAL */
+ GoingAway ; /* EMIT_SIGNAL */
// Destroy all the marker views we may have associaited with this TimeAxis
for(MarkerTimeAxisList::iterator iter = marker_time_axis_list.begin(); iter != marker_time_axis_list.end(); ++iter)
@@ -322,7 +322,7 @@ ImageFrameTimeAxis::add_marker_time_axis(MarkerTimeAxis* marker_track, void* src
else
{
marker_time_axis_list.push_back(marker_track) ;
- marker_track->GoingAway.connect(sigc::bind(sigc::mem_fun(*this, &ImageFrameTimeAxis::remove_time_axis_view), marker_track, (void*)this));
+ scoped_connect (marker_track->GoingAway, boost::bind (&ImageFrameTimeAxis::remove_time_axis_view, this, marker_track, (void*)this));
MarkerTimeAxisAdded(marker_track, src) ; /* EMIT_SIGNAL */
ret = true ;
diff --git a/gtk2_ardour/imageframe_time_axis.h b/gtk2_ardour/imageframe_time_axis.h
index 21db88e3e4..6b2576fe96 100644
--- a/gtk2_ardour/imageframe_time_axis.h
+++ b/gtk2_ardour/imageframe_time_axis.h
@@ -62,7 +62,7 @@ class ImageFrameTimeAxis : public VisualTimeAxis
* @param sess the current session
* @param canvas the parent canvas item
*/
- ImageFrameTimeAxis(const std::string & track_id, PublicEditor& ed, ARDOUR::Session& sess, ArdourCanvas::Canvas& canvas) ;
+ ImageFrameTimeAxis(const std::string & track_id, PublicEditor& ed, ARDOUR::Session* sess, ArdourCanvas::Canvas& canvas) ;
/**
* Destructor
diff --git a/gtk2_ardour/imageframe_time_axis_group.cc b/gtk2_ardour/imageframe_time_axis_group.cc
index c3599d1b00..28d2aac1a1 100644
--- a/gtk2_ardour/imageframe_time_axis_group.cc
+++ b/gtk2_ardour/imageframe_time_axis_group.cc
@@ -74,7 +74,7 @@ ImageFrameTimeAxisGroup::~ImageFrameTimeAxisGroup()
iter = next ;
}
- GoingAway() ; /* EMIT_SIGNAL */
+ GoingAway ; /* EMIT_SIGNAL */
}
@@ -216,7 +216,7 @@ ImageFrameTimeAxisGroup::add_imageframe_item(const string & frame_id, nframes_t
imageframe_views.push_front(ifv) ;
- ifv->GoingAway.connect(sigc::bind(sigc::mem_fun(*this,&ImageFrameTimeAxisGroup::remove_imageframe_item), (void*)this)) ;
+ scoped_connect (ifv->GoingAway, boost::bind (&ImageFrameTimeAxisGroup::remove_imageframe_item, this, (void*)this));
ImageFrameAdded(ifv, src) ; /* EMIT_SIGNAL */
}
diff --git a/gtk2_ardour/imageframe_time_axis_view.cc b/gtk2_ardour/imageframe_time_axis_view.cc
index 88cdbd53cc..fa339b42ec 100644
--- a/gtk2_ardour/imageframe_time_axis_view.cc
+++ b/gtk2_ardour/imageframe_time_axis_view.cc
@@ -214,7 +214,7 @@ ImageFrameTimeAxisView::add_imageframe_group(std::string group_id, void* src)
imageframe_groups.push_front(iftag) ;
- iftag->GoingAway.connect(sigc::bind(sigc::mem_fun(*this,&ImageFrameTimeAxisView::remove_imageframe_group), iftag, (void*)this)) ;
+ scoped_connect (iftag->GoingAway, boost::bind (&ImageFrameTimeAxisView::remove_imageframe_group, this, iftag, (void*)this)) ;
ImageFrameGroupAdded(iftag, src) ; /* EMIT_SIGNAL */
}
@@ -410,7 +410,7 @@ ImageFrameTimeAxisView::set_imageframe_duration_sec(double sec)
{
if(selected_imageframe_group && selected_imageframe_view)
{
- selected_imageframe_view->set_duration((nframes_t) (sec * _trackview.editor.current_session()->frame_rate()), this) ;
+ selected_imageframe_view->set_duration((nframes_t) (sec * _trackview.editor.session()->frame_rate()), this) ;
}
}
diff --git a/gtk2_ardour/imageframe_view.cc b/gtk2_ardour/imageframe_view.cc
index 65d091804a..c704eb9768 100644
--- a/gtk2_ardour/imageframe_view.cc
+++ b/gtk2_ardour/imageframe_view.cc
@@ -287,7 +287,7 @@ ImageFrameView::add_marker_view_item(MarkerView* item, void* src)
{
marker_view_list.push_back(item) ;
- item->GoingAway.connect(sigc::bind(sigc::mem_fun(*this, &ImageFrameView::remove_marker_view_item), (void*)this));
+ scoped_connect (item->GoingAway, boost::bind (&ImageFrameView::remove_marker_view_item, this, (void*)this));
MarkerViewAdded(item, src) ; /* EMIT_SIGNAL */
}
diff --git a/gtk2_ardour/io_selector.h b/gtk2_ardour/io_selector.h
index f61d2cc5c2..63e02a2a75 100644
--- a/gtk2_ardour/io_selector.h
+++ b/gtk2_ardour/io_selector.h
@@ -122,7 +122,7 @@ class PortInsertWindow : public ArdourDialog
void accept ();
void plugin_going_away ();
- sigc::connection going_away_connection;
+ boost::signals2::scoped_connection going_away_connection;
bool wm_delete (GdkEventAny*);
};
diff --git a/gtk2_ardour/level_meter.cc b/gtk2_ardour/level_meter.cc
index 3ddc9d2f94..bd85596a8c 100644
--- a/gtk2_ardour/level_meter.cc
+++ b/gtk2_ardour/level_meter.cc
@@ -53,11 +53,11 @@ using namespace std;
//sigc::signal<void,RouteGroup*> LevelMeter::ResetGroupPeakDisplays;
-LevelMeter::LevelMeter (Session& s)
- : _session (s)
- , _meter (0)
+LevelMeter::LevelMeter (Session* s)
+ : _meter (0)
, meter_length (0)
{
+ set_session (s);
set_spacing (1);
Config->ParameterChanged.connect (sigc::mem_fun (*this, &LevelMeter::parameter_changed));
UI::instance()->theme_changed.connect (sigc::mem_fun(*this, &LevelMeter::on_theme_changed));
@@ -83,9 +83,9 @@ LevelMeter::set_meter (PeakMeter* meter)
{
_configuration_connection.disconnect();
_meter = meter;
+
if (_meter) {
- _configuration_connection = _meter->ConfigurationChanged.connect(
- sigc::mem_fun(*this, &LevelMeter::configuration_changed));
+ _configuration_connection = _meter->ConfigurationChanged.connect(boost::bind (&LevelMeter::configuration_changed, this, _1, _2));
}
}
diff --git a/gtk2_ardour/level_meter.h b/gtk2_ardour/level_meter.h
index bf0e081cce..cd2ccb7d7d 100644
--- a/gtk2_ardour/level_meter.h
+++ b/gtk2_ardour/level_meter.h
@@ -31,6 +31,7 @@
#include <gtkmm/drawingarea.h>
#include "ardour/types.h"
+#include "ardour/session_handle.h"
#include <gtkmm2ext/click_box.h>
#include <gtkmm2ext/focus_entry.h>
@@ -49,10 +50,10 @@ namespace Gtk {
class Menu;
}
-class LevelMeter : public Gtk::HBox
+class LevelMeter : public Gtk::HBox, public ARDOUR::SessionHandlePtr
{
public:
- LevelMeter (ARDOUR::Session&);
+ LevelMeter (ARDOUR::Session*);
~LevelMeter ();
virtual void set_meter (ARDOUR::PeakMeter* meter);
@@ -66,7 +67,6 @@ class LevelMeter : public Gtk::HBox
void setup_meters (int len=0, int width=3);
private:
- ARDOUR::Session& _session;
ARDOUR::PeakMeter* _meter;
Width _width;
@@ -91,7 +91,7 @@ class LevelMeter : public Gtk::HBox
std::vector<MeterInfo> meters;
float max_peak;
- sigc::connection _configuration_connection;
+ boost::signals2::scoped_connection _configuration_connection;
void hide_all_meters ();
gint meter_button_release (GdkEventButton*, uint32_t);
diff --git a/gtk2_ardour/location_ui.cc b/gtk2_ardour/location_ui.cc
index 4190a2c463..328d87b544 100644
--- a/gtk2_ardour/location_ui.cc
+++ b/gtk2_ardour/location_ui.cc
@@ -44,7 +44,8 @@ using namespace Gtk;
using namespace Gtkmm2ext;
LocationEditRow::LocationEditRow(Session * sess, Location * loc, int32_t num)
- : location(0), session(0),
+ : SessionHandlePtr (0), /* explicitly set below */
+ location(0),
item_table (1, 6, false),
start_clock (X_("locationstart"), true, X_("LocationEditRowClock"), true, false),
end_clock (X_("locationend"), true, X_("LocationEditRowClock"), true, false),
@@ -149,24 +150,22 @@ LocationEditRow::LocationEditRow(Session * sess, Location * loc, int32_t num)
LocationEditRow::~LocationEditRow()
{
if (location) {
- start_changed_connection.disconnect();
- end_changed_connection.disconnect();
- name_changed_connection.disconnect();
- changed_connection.disconnect();
- flags_changed_connection.disconnect();
+ connections.drop_connections ();
}
}
void
LocationEditRow::set_session (Session *sess)
{
- session = sess;
+ SessionHandlePtr::set_session (sess);
- if (!session) return;
+ if (!_session) {
+ return;
+ }
- start_clock.set_session (session);
- end_clock.set_session (session);
- length_clock.set_session (session);
+ start_clock.set_session (_session);
+ end_clock.set_session (_session);
+ length_clock.set_session (_session);
}
@@ -184,11 +183,7 @@ void
LocationEditRow::set_location (Location *loc)
{
if (location) {
- start_changed_connection.disconnect();
- end_changed_connection.disconnect();
- name_changed_connection.disconnect();
- changed_connection.disconnect();
- flags_changed_connection.disconnect();
+ connections.drop_connections ();
}
location = loc;
@@ -238,7 +233,7 @@ LocationEditRow::set_location (Location *loc)
cd_check_button.set_active (location->is_cd_marker());
cd_check_button.show();
- if (location->start() == session->current_start_frame()) {
+ if (location->start() == _session->current_start_frame()) {
cd_check_button.set_sensitive (false);
} else {
cd_check_button.set_sensitive (true);
@@ -287,11 +282,11 @@ LocationEditRow::set_location (Location *loc)
end_clock.set_sensitive (!location->locked());
length_clock.set_sensitive (!location->locked());
- start_changed_connection = location->start_changed.connect (sigc::mem_fun(*this, &LocationEditRow::start_changed));
- end_changed_connection = location->end_changed.connect (sigc::mem_fun(*this, &LocationEditRow::end_changed));
- name_changed_connection = location->name_changed.connect (sigc::mem_fun(*this, &LocationEditRow::name_changed));
- changed_connection = location->changed.connect (sigc::mem_fun(*this, &LocationEditRow::location_changed));
- flags_changed_connection = location->FlagsChanged.connect (sigc::mem_fun(*this, &LocationEditRow::flags_changed));
+ connections.add_connection (location->start_changed.connect (boost::bind (&LocationEditRow::start_changed, this, _1)));
+ connections.add_connection (location->end_changed.connect (boost::bind (&LocationEditRow::end_changed, this, _1)));
+ connections.add_connection (location->name_changed.connect (boost::bind (&LocationEditRow::name_changed, this, _1)));
+ connections.add_connection (location->changed.connect (boost::bind (&LocationEditRow::location_changed, this, _1)));
+ connections.add_connection (location->FlagsChanged.connect (boost::bind (&LocationEditRow::flags_changed, this, _1, _2)));
}
void
@@ -406,7 +401,7 @@ LocationEditRow::cd_toggled ()
//}
if (cd_check_button.get_active()) {
- if (location->start() <= session->current_start_frame()) {
+ if (location->start() <= _session->current_start_frame()) {
error << _("You cannot put a CD marker at the start of the session") << endmsg;
cd_check_button.set_active (false);
return;
@@ -518,7 +513,7 @@ LocationEditRow::start_changed (ARDOUR::Location *loc)
start_clock.set (location->start());
- if (location->start() == session->current_start_frame()) {
+ if (location->start() == _session->current_start_frame()) {
cd_check_button.set_sensitive (false);
} else {
cd_check_button.set_sensitive (true);
@@ -587,8 +582,7 @@ LocationEditRow::focus_name() {
LocationUI::LocationUI ()
- : session (0)
- , add_location_button (_("New Marker"))
+ : add_location_button (_("New Marker"))
, add_range_button (_("New Range"))
{
i_am_the_modifier = 0;
@@ -681,12 +675,12 @@ LocationUI::do_location_remove (ARDOUR::Location *loc)
return FALSE;
}
- session->begin_reversible_command (_("remove marker"));
- XMLNode &before = session->locations()->get_state();
- session->locations()->remove (loc);
- XMLNode &after = session->locations()->get_state();
- session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
- session->commit_reversible_command ();
+ _session->begin_reversible_command (_("remove marker"));
+ XMLNode &before = _session->locations()->get_state();
+ _session->locations()->remove (loc);
+ XMLNode &after = _session->locations()->get_state();
+ _session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after));
+ _session->commit_reversible_command ();
return FALSE;
}
@@ -769,7 +763,7 @@ LocationUI::map_locations (Locations::LocationList& locations)
if (location->is_mark()) {
mark_n++;
- erow = manage (new LocationEditRow(session, location, mark_n));
+ erow = manage (new LocationEditRow(_session, location, mark_n));
erow->remove_requested.connect (sigc::mem_fun(*this, &LocationUI::location_remove_requested));
erow->redraw_ranges.connect (sigc::mem_fun(*this, &LocationUI::location_redraw_ranges));
loc_children.push_back(Box_Helpers::Element(*erow, PACK_SHRINK, 1, PACK_START));
@@ -779,17 +773,17 @@ LocationUI::map_locations (Locations::LocationList& locations)
}
}
else if (location->is_auto_punch()) {
- punch_edit_row.set_session (session);
+ punch_edit_row.set_session (_session);
punch_edit_row.set_location (location);
punch_edit_row.show_all();
}
else if (location->is_auto_loop()) {
- loop_edit_row.set_session (session);
+ loop_edit_row.set_session (_session);
loop_edit_row.set_location (location);
loop_edit_row.show_all();
}
else {
- erow = manage (new LocationEditRow(session, location));
+ erow = manage (new LocationEditRow(_session, location));
erow->remove_requested.connect (sigc::mem_fun(*this, &LocationUI::location_remove_requested));
range_children.push_back(Box_Helpers::Element(*erow, PACK_SHRINK, 1, PACK_START));
}
@@ -804,19 +798,19 @@ LocationUI::add_new_location()
{
string markername;
- if (session) {
- nframes_t where = session->audible_frame();
- session->locations()->next_available_name(markername,"mark");
+ if (_session) {
+ nframes_t where = _session->audible_frame();
+ _session->locations()->next_available_name(markername,"mark");
Location *location = new Location (where, where, markername, Location::IsMark);
if (Config->get_name_new_markers()) {
newest_location = location;
}
- session->begin_reversible_command (_("add marker"));
- XMLNode &before = session->locations()->get_state();
- session->locations()->add (location, true);
- XMLNode &after = session->locations()->get_state();
- session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
- session->commit_reversible_command ();
+ _session->begin_reversible_command (_("add marker"));
+ XMLNode &before = _session->locations()->get_state();
+ _session->locations()->add (location, true);
+ XMLNode &after = _session->locations()->get_state();
+ _session->add_command (new MementoCommand<Locations>(*(_session->locations()), &before, &after));
+ _session->commit_reversible_command ();
}
}
@@ -826,28 +820,19 @@ LocationUI::add_new_range()
{
string rangename;
- if (session) {
- nframes_t where = session->audible_frame();
- session->locations()->next_available_name(rangename,"unnamed");
+ if (_session) {
+ nframes_t where = _session->audible_frame();
+ _session->locations()->next_available_name(rangename,"unnamed");
Location *location = new Location (where, where, rangename, Location::IsRangeMarker);
- session->begin_reversible_command (_("add range marker"));
- XMLNode &before = session->locations()->get_state();
- session->locations()->add (location, true);
- XMLNode &after = session->locations()->get_state();
- session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
- session->commit_reversible_command ();
+ _session->begin_reversible_command (_("add range marker"));
+ XMLNode &before = _session->locations()->get_state();
+ _session->locations()->add (location, true);
+ XMLNode &after = _session->locations()->get_state();
+ _session->add_command (new MementoCommand<Locations>(*(_session->locations()), &before, &after));
+ _session->commit_reversible_command ();
}
}
-
-void
-LocationUI::refresh_location_list_s (Change ignored)
-{
- ENSURE_GUI_THREAD (*this, &LocationUI::refresh_location_list_s, ignored)
-
- refresh_location_list ();
-}
-
void
LocationUI::refresh_location_list ()
{
@@ -863,8 +848,8 @@ LocationUI::refresh_location_list ()
loc_children.clear();
range_children.clear();
- if (session) {
- session->locations()->apply (*this, &LocationUI::map_locations);
+ if (_session) {
+ _session->locations()->apply (*this, &LocationUI::map_locations);
}
}
@@ -872,22 +857,22 @@ LocationUI::refresh_location_list ()
void
LocationUI::set_session(ARDOUR::Session* s)
{
- session = s;
+ SessionHandlePtr::set_session (s);
- if (session) {
- session->locations()->changed.connect (sigc::mem_fun(*this, &LocationUI::refresh_location_list));
- session->locations()->StateChanged.connect (sigc::mem_fun(*this, &LocationUI::refresh_location_list_s));
- session->locations()->added.connect (sigc::mem_fun(*this, &LocationUI::location_added));
- session->locations()->removed.connect (sigc::mem_fun(*this, &LocationUI::location_removed));
- session->GoingAway.connect (sigc::mem_fun(*this, &LocationUI::session_gone));
+ if (_session) {
+ _session_connections.add_connection (_session->locations()->changed.connect (boost::bind (&LocationUI::refresh_location_list, this)));
+ _session_connections.add_connection (_session->locations()->StateChanged.connect (boost::bind (&LocationUI::refresh_location_list, this)));
+ _session_connections.add_connection (_session->locations()->added.connect (boost::bind (&LocationUI::location_added, this, _1)));
+ _session_connections.add_connection (_session->locations()->removed.connect (boost::bind (&LocationUI::location_removed, this, _1)));
}
+
refresh_location_list ();
}
void
-LocationUI::session_gone()
+LocationUI::session_going_away()
{
- ENSURE_GUI_THREAD (*this, &LocationUI::session_gone)
+ ENSURE_GUI_THREAD (*this, &LocationUI::session_going_away);
using namespace Box_Helpers;
BoxList & loc_children = location_rows.children();
@@ -901,6 +886,8 @@ LocationUI::session_gone()
punch_edit_row.set_session (0);
punch_edit_row.set_location (0);
+
+ SessionHandlePtr::session_going_away ();
}
/*------------------------*/
@@ -938,13 +925,11 @@ LocationUIWindow::set_session (Session *s)
{
ArdourDialog::set_session (s);
_ui.set_session (s);
-
- s->GoingAway.connect (sigc::mem_fun (*this, &LocationUIWindow::session_gone));
}
void
-LocationUIWindow::session_gone ()
+LocationUIWindow::session_going_away ()
{
+ ArdourDialog::session_going_away ();
hide_all();
- ArdourDialog::session_gone ();
}
diff --git a/gtk2_ardour/location_ui.h b/gtk2_ardour/location_ui.h
index 56401f6139..dd735cddba 100644
--- a/gtk2_ardour/location_ui.h
+++ b/gtk2_ardour/location_ui.h
@@ -29,18 +29,20 @@
#include <gtkmm/paned.h>
#include <gtkmm/scrolledwindow.h>
+#include "pbd/scoped_connections.h"
+
#include "ardour/location.h"
+#include "ardour/session_handle.h"
#include "ardour_dialog.h"
#include "audio_clock.h"
namespace ARDOUR {
class LocationStack;
- class Session;
class Location;
}
-class LocationEditRow : public Gtk::HBox
+class LocationEditRow : public Gtk::HBox, public ARDOUR::SessionHandlePtr
{
public:
LocationEditRow (ARDOUR::Session *sess=0, ARDOUR::Location *loc=0, int32_t num=-1);
@@ -66,9 +68,6 @@ class LocationEditRow : public Gtk::HBox
};
ARDOUR::Location *location;
- ARDOUR::Session *session;
-
-
Gtk::Table item_table;
@@ -102,7 +101,6 @@ class LocationEditRow : public Gtk::HBox
Gtk::CheckButton scms_check_button;
Gtk::CheckButton preemph_check_button;
-
guint32 i_am_the_modifier;
int number;
@@ -130,34 +128,27 @@ class LocationEditRow : public Gtk::HBox
void location_changed (ARDOUR::Location *);
void flags_changed (ARDOUR::Location *, void *src);
- sigc::connection start_changed_connection;
- sigc::connection end_changed_connection;
- sigc::connection name_changed_connection;
- sigc::connection changed_connection;
- sigc::connection flags_changed_connection;
-
+ PBD::ScopedConnectionList connections;
};
-class LocationUI : public Gtk::HBox
+class LocationUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr
{
public:
LocationUI ();
~LocationUI ();
- virtual void set_session (ARDOUR::Session *);
+ void set_session (ARDOUR::Session *);
void add_new_location();
void add_new_range();
void refresh_location_list ();
- void refresh_location_list_s (ARDOUR::Change);
private:
- ARDOUR::Session* session;
ARDOUR::LocationStack* locations;
ARDOUR::Location *newest_location;
- void session_gone();
+ void session_going_away ();
Gtk::VBox location_vpacker;
@@ -212,7 +203,7 @@ class LocationUIWindow : public ArdourDialog
protected:
LocationUI _ui;
bool on_delete_event (GdkEventAny*);
- void session_gone();
+ void session_going_away();
};
#endif // __ardour_location_ui_h__
diff --git a/gtk2_ardour/marker_time_axis.cc b/gtk2_ardour/marker_time_axis.cc
index 9dea703dfd..c58f607be6 100644
--- a/gtk2_ardour/marker_time_axis.cc
+++ b/gtk2_ardour/marker_time_axis.cc
@@ -56,7 +56,7 @@ using namespace Gtk;
* @param name the name/id of this time axis
* @param tav the associated track view that this MarkerTimeAxis is marking up
*/
-MarkerTimeAxis::MarkerTimeAxis (PublicEditor& ed, ARDOUR::Session& sess, Canvas& canvas, const string & name, TimeAxisView* tav)
+MarkerTimeAxis::MarkerTimeAxis (PublicEditor& ed, ARDOUR::Session* sess, Canvas& canvas, const string & name, TimeAxisView* tav)
: AxisView(sess),
VisualTimeAxis(name, ed, sess, canvas)
{
@@ -90,7 +90,7 @@ MarkerTimeAxis::MarkerTimeAxis (PublicEditor& ed, ARDOUR::Session& sess, Canvas&
*/
MarkerTimeAxis::~MarkerTimeAxis()
{
- GoingAway() ; /* EMIT_SIGNAL */
+ GoingAway ; /* EMIT_SIGNAL */
// destroy the view helper
// this handles removing and destroying individual marker items
diff --git a/gtk2_ardour/marker_time_axis.h b/gtk2_ardour/marker_time_axis.h
index 05b95bddaa..67c3e2beff 100644
--- a/gtk2_ardour/marker_time_axis.h
+++ b/gtk2_ardour/marker_time_axis.h
@@ -65,7 +65,7 @@ class MarkerTimeAxis : public VisualTimeAxis
* @param name the name/id of this time axis
* @param tav the associated track view that this MarkerTimeAxis is marking up
*/
- MarkerTimeAxis(PublicEditor& ed, ARDOUR::Session& sess, ArdourCanvas::Canvas& canvas, const std::string & name, TimeAxisView* tav) ;
+ MarkerTimeAxis(PublicEditor& ed, ARDOUR::Session* sess, ArdourCanvas::Canvas& canvas, const std::string & name, TimeAxisView* tav) ;
/**
* Destructor
diff --git a/gtk2_ardour/marker_time_axis_view.cc b/gtk2_ardour/marker_time_axis_view.cc
index 4189788b4c..402f2ac479 100644
--- a/gtk2_ardour/marker_time_axis_view.cc
+++ b/gtk2_ardour/marker_time_axis_view.cc
@@ -211,7 +211,7 @@ MarkerTimeAxisView::add_marker_view(ImageFrameView* ifv, std::string mark_type,
ifv->add_marker_view_item(mv, src) ;
marker_view_list.push_front(mv) ;
- mv->GoingAway.connect(sigc::bind (sigc::mem_fun(*this,&MarkerTimeAxisView::remove_marker_view), (void*)this)) ;
+ scoped_connect (mv->GoingAway, boost::bind (&MarkerTimeAxisView::remove_marker_view, this, (void*)this));
MarkerViewAdded(mv,src) ; /* EMIT_SIGNAL */
@@ -337,7 +337,7 @@ MarkerTimeAxisView::set_marker_duration_sec(double sec)
{
if(get_selected_time_axis_item() != 0)
{
- get_selected_time_axis_item()->set_duration((nframes_t) (sec * _trackview.editor.current_session()->frame_rate()), this) ;
+ get_selected_time_axis_item()->set_duration((nframes_t) (sec * _trackview.editor.session()->frame_rate()), this) ;
}
}
diff --git a/gtk2_ardour/midi_cut_buffer.cc b/gtk2_ardour/midi_cut_buffer.cc
index 008597bc84..9c1c84ede4 100644
--- a/gtk2_ardour/midi_cut_buffer.cc
+++ b/gtk2_ardour/midi_cut_buffer.cc
@@ -20,11 +20,11 @@
using namespace ARDOUR;
-MidiCutBuffer::MidiCutBuffer (Session& s)
- : AutomatableSequence<MidiModel::TimeType> (s, 0)
+MidiCutBuffer::MidiCutBuffer (Session* s)
+ : AutomatableSequence<MidiModel::TimeType> (*s, 0)
, _origin (0)
{
-
+
}
MidiCutBuffer::~MidiCutBuffer ()
diff --git a/gtk2_ardour/midi_cut_buffer.h b/gtk2_ardour/midi_cut_buffer.h
index 4281b962bc..a52771019d 100644
--- a/gtk2_ardour/midi_cut_buffer.h
+++ b/gtk2_ardour/midi_cut_buffer.h
@@ -30,7 +30,7 @@ class MidiCutBuffer : public ARDOUR::AutomatableSequence<ARDOUR::MidiModel::Time
public:
typedef ARDOUR::MidiModel::TimeType TimeType;
- MidiCutBuffer (ARDOUR::Session&);
+ MidiCutBuffer (ARDOUR::Session*);
~MidiCutBuffer();
TimeType origin() const { return _origin; }
diff --git a/gtk2_ardour/midi_list_editor.cc b/gtk2_ardour/midi_list_editor.cc
index b807de28f9..026b09b927 100644
--- a/gtk2_ardour/midi_list_editor.cc
+++ b/gtk2_ardour/midi_list_editor.cc
@@ -31,11 +31,12 @@ using namespace Gtk;
using namespace Glib;
using namespace ARDOUR;
-MidiListEditor::MidiListEditor (Session& s, boost::shared_ptr<MidiRegion> r)
+MidiListEditor::MidiListEditor (Session* s, boost::shared_ptr<MidiRegion> r)
: ArdourDialog (r->name(), false, false)
- , session (s)
, region (r)
{
+ set_session (s);
+
model = ListStore::create (columns);
view.set_model (model);
@@ -96,40 +97,43 @@ MidiListEditor::redisplay_model ()
view.set_model (Glib::RefPtr<Gtk::ListStore>(0));
model->clear ();
- MidiModel::Notes notes = region->midi_source(0)->model()->notes();
- TreeModel::Row row;
-
- for (MidiModel::Notes::iterator i = notes.begin(); i != notes.end(); ++i) {
- row = *(model->append());
- row[columns.channel] = (*i)->channel();
- row[columns.note_name] = _("Note");
- row[columns.note] = (*i)->note();
- row[columns.velocity] = (*i)->velocity();
-
- BBT_Time bbt;
- BBT_Time dur;
- stringstream ss;
-
- session.tempo_map().bbt_time (region->position(), bbt);
-
- dur.bars = 0;
- dur.beats = floor ((*i)->time());
- dur.ticks = 0;
-
- session.tempo_map().bbt_duration_at (region->position(), dur, 0);
-
- ss << bbt;
- row[columns.start] = ss.str();
- ss << dur;
- row[columns.length] = ss.str();
-
- session.tempo_map().bbt_time (region->position(), bbt);
- /* XXX get end point */
-
- ss << bbt;
- row[columns.end] = ss.str();
-
- row[columns._note] = (*i);
+ if (_session) {
+
+ MidiModel::Notes notes = region->midi_source(0)->model()->notes();
+ TreeModel::Row row;
+
+ for (MidiModel::Notes::iterator i = notes.begin(); i != notes.end(); ++i) {
+ row = *(model->append());
+ row[columns.channel] = (*i)->channel();
+ row[columns.note_name] = _("Note");
+ row[columns.note] = (*i)->note();
+ row[columns.velocity] = (*i)->velocity();
+
+ BBT_Time bbt;
+ BBT_Time dur;
+ stringstream ss;
+
+ _session->tempo_map().bbt_time (region->position(), bbt);
+
+ dur.bars = 0;
+ dur.beats = floor ((*i)->time());
+ dur.ticks = 0;
+
+ _session->tempo_map().bbt_duration_at (region->position(), dur, 0);
+
+ ss << bbt;
+ row[columns.start] = ss.str();
+ ss << dur;
+ row[columns.length] = ss.str();
+
+ _session->tempo_map().bbt_time (region->position(), bbt);
+ /* XXX get end point */
+
+ ss << bbt;
+ row[columns.end] = ss.str();
+
+ row[columns._note] = (*i);
+ }
}
view.set_model (model);
diff --git a/gtk2_ardour/midi_list_editor.h b/gtk2_ardour/midi_list_editor.h
index 96a04ada7c..de7b2220bb 100644
--- a/gtk2_ardour/midi_list_editor.h
+++ b/gtk2_ardour/midi_list_editor.h
@@ -26,6 +26,8 @@
#include "evoral/types.hpp"
+#include "ardour/session_handle.h"
+
#include "ardour_dialog.h"
namespace ARDOUR {
@@ -39,7 +41,7 @@ class MidiListEditor : public ArdourDialog
public:
typedef Evoral::Note<Evoral::MusicalTime> NoteType;
- MidiListEditor(ARDOUR::Session&, boost::shared_ptr<ARDOUR::MidiRegion>);
+ MidiListEditor(ARDOUR::Session*, boost::shared_ptr<ARDOUR::MidiRegion>);
~MidiListEditor();
private:
@@ -64,7 +66,6 @@ class MidiListEditor : public ArdourDialog
Gtk::TreeModelColumn<boost::shared_ptr<NoteType> > _note;
};
- ARDOUR::Session& session;
MidiListModelColumns columns;
Glib::RefPtr<Gtk::ListStore> model;
Gtk::TreeView view;
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index a8f6f11b42..d2f1657821 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -552,7 +552,7 @@ MidiRegionView::create_note_at(double x, double y, double length)
MidiModel::DeltaCommand* cmd = _model->new_delta_command("add note");
cmd->add(new_note);
- _model->apply_command(trackview.session(), cmd);
+ _model->apply_command(*trackview.session(), cmd);
play_midi_note (new_note);
}
@@ -585,8 +585,8 @@ MidiRegionView::display_model(boost::shared_ptr<MidiModel> model)
{
_model = model;
content_connection.disconnect ();
- content_connection = _model->ContentsChanged.connect(
- sigc::mem_fun(this, &MidiRegionView::redisplay_model));
+ content_connection = _model->ContentsChanged.connect (boost::bind (&MidiRegionView::redisplay_model, this));
+
clear_events ();
if (_enable_display) {
@@ -665,7 +665,7 @@ MidiRegionView::apply_delta()
_marked_for_selection.insert((*i)->note());
}
- _model->apply_command(trackview.session(), _delta_command);
+ _model->apply_command(*trackview.session(), _delta_command);
_delta_command = 0;
midi_view()->midi_track()->diskstream()->playlist_modified();
@@ -680,7 +680,7 @@ MidiRegionView::apply_diff ()
return;
}
- _model->apply_command(trackview.session(), _diff_command);
+ _model->apply_command(*trackview.session(), _diff_command);
_diff_command = 0;
midi_view()->midi_track()->diskstream()->playlist_modified();
@@ -699,7 +699,7 @@ MidiRegionView::apply_delta_as_subcommand()
_marked_for_selection.insert((*i)->note());
}
- _model->apply_command_as_subcommand(trackview.session(), _delta_command);
+ _model->apply_command_as_subcommand(*trackview.session(), _delta_command);
_delta_command = 0;
midi_view()->midi_track()->diskstream()->playlist_modified();
@@ -719,7 +719,7 @@ MidiRegionView::apply_diff_as_subcommand()
_marked_for_selection.insert((*i)->note());
}
- _model->apply_command_as_subcommand(trackview.session(), _diff_command);
+ _model->apply_command_as_subcommand(*trackview.session(), _diff_command);
_diff_command = 0;
midi_view()->midi_track()->diskstream()->playlist_modified();
@@ -1071,7 +1071,7 @@ MidiRegionView::add_ghost (TimeAxisView& tv)
}
}
- ghost->GoingAway.connect (sigc::mem_fun(*this, &MidiRegionView::remove_ghost));
+ ghost->GoingAway.connect (boost::bind (&RegionView::remove_ghost, this, _1));
return ghost;
}
@@ -1151,7 +1151,7 @@ MidiRegionView::play_midi_note(boost::shared_ptr<NoteType> note)
const double note_length_beats = (note->off_event().time() - note->on_event().time());
nframes_t note_length_ms = beats_to_frames(note_length_beats)
- * (1000 / (double)route_ui->session().nominal_frame_rate());
+ * (1000 / (double)route_ui->session()->nominal_frame_rate());
Glib::signal_timeout().connect(sigc::bind(sigc::mem_fun(this, &MidiRegionView::play_midi_note_off), note),
note_length_ms, G_PRIORITY_DEFAULT);
}
@@ -2431,11 +2431,11 @@ MidiRegionView::paste (nframes64_t pos, float times, const MidiCutBuffer& mcb)
if (end_frame > region_end) {
- trackview.session().begin_reversible_command (_("paste"));
+ trackview.session()->begin_reversible_command (_("paste"));
XMLNode& before (_region->get_state());
_region->set_length (end_frame, this);
- trackview.session().add_command (new MementoCommand<Region>(*_region, &before, &_region->get_state()));
+ trackview.session()->add_command (new MementoCommand<Region>(*_region, &before, &_region->get_state()));
}
apply_delta ();
diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h
index 22c2b845fd..e8c25e8647 100644
--- a/gtk2_ardour/midi_region_view.h
+++ b/gtk2_ardour/midi_region_view.h
@@ -24,6 +24,9 @@
#include <libgnomecanvasmm.h>
#include <libgnomecanvasmm/polygon.h>
+
+#include <boost/signals2.hpp>
+
#include "ardour/midi_track.h"
#include "ardour/midi_region.h"
#include "ardour/midi_model.h"
@@ -386,7 +389,7 @@ class MidiRegionView : public RegionView
std::vector<NoteResizeData *> _resize_data;
/* connection used to connect to model's ContentChanged signal */
- sigc::connection content_connection;
+ boost::signals2::scoped_connection content_connection;
ArdourCanvas::CanvasNoteEvent* find_canvas_note (boost::shared_ptr<NoteType>);
Events::iterator _optimization_iterator;
diff --git a/gtk2_ardour/midi_streamview.cc b/gtk2_ardour/midi_streamview.cc
index 77d9afabae..4d0c7fa385 100644
--- a/gtk2_ardour/midi_streamview.cc
+++ b/gtk2_ardour/midi_streamview.cc
@@ -180,7 +180,7 @@ MidiStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wfd,
display_region (region_view, wfd);
/* catch regionview going away */
- region->GoingAway.connect (sigc::bind (sigc::mem_fun (*this, &MidiStreamView::remove_region_view), region));
+ scoped_connect (region->GoingAway, boost::bind (&MidiStreamView::remove_region_view, this, region));
RegionViewAdded (region_view);
@@ -383,10 +383,10 @@ MidiStreamView::setup_rec_box ()
{
// cerr << _trackview.name() << " streamview SRB\n";
- if (_trackview.session().transport_rolling()) {
+ if (_trackview.session()->transport_rolling()) {
if (!rec_active &&
- _trackview.session().record_status() == Session::Recording &&
+ _trackview.session()->record_status() == Session::Recording &&
_trackview.get_diskstream()->record_enabled()) {
if (use_rec_regions && rec_regions.size() == rec_rects.size()) {
@@ -395,19 +395,15 @@ MidiStreamView::setup_rec_box ()
MidiRegion::SourceList sources;
- for (list<sigc::connection>::iterator prc = rec_data_ready_connections.begin();
- prc != rec_data_ready_connections.end(); ++prc) {
- (*prc).disconnect();
- }
- rec_data_ready_connections.clear();
+ rec_data_ready_connections.drop_connections ();
boost::shared_ptr<MidiDiskstream> mds = _trackview.midi_track()->midi_diskstream();
sources.push_back(mds->write_source());
- rec_data_ready_connections.push_back (mds->write_source()->ViewDataRangeReady.connect (sigc::bind (
- sigc::mem_fun (*this, &MidiStreamView::rec_data_range_ready),
- boost::weak_ptr<Source>(mds->write_source()))));
+ rec_data_ready_connections.add_connection (mds->write_source()->ViewDataRangeReady.connect
+ (boost::bind (&MidiStreamView::rec_data_range_ready, this,
+ _1, _2, boost::weak_ptr<Source>(mds->write_source()))));
// handle multi
@@ -422,7 +418,7 @@ MidiStreamView::setup_rec_box ()
assert(region);
region->block_property_changes ();
- region->set_position (_trackview.session().transport_frame(), this);
+ region->set_position (_trackview.session()->transport_frame(), this);
rec_regions.push_back (make_pair(region, (RegionView*)0));
// rec regions are destroyed in setup_rec_box
@@ -455,7 +451,7 @@ MidiStreamView::setup_rec_box ()
RecBoxInfo recbox;
recbox.rectangle = rec_rect;
- recbox.start = _trackview.session().transport_frame();
+ recbox.start = _trackview.session()->transport_frame();
recbox.length = 0;
rec_rects.push_back (recbox);
@@ -467,7 +463,7 @@ MidiStreamView::setup_rec_box ()
rec_active = true;
} else if (rec_active &&
- (_trackview.session().record_status() != Session::Recording ||
+ (_trackview.session()->record_status() != Session::Recording ||
!_trackview.get_diskstream()->record_enabled())) {
screen_update_connection.disconnect();
rec_active = false;
@@ -482,12 +478,7 @@ MidiStreamView::setup_rec_box ()
/* disconnect rapid update */
screen_update_connection.disconnect();
-
- for (list<sigc::connection>::iterator prc = rec_data_ready_connections.begin();
- prc != rec_data_ready_connections.end(); ++prc) {
- (*prc).disconnect();
- }
- rec_data_ready_connections.clear();
+ rec_data_ready_connections.drop_connections ();
rec_updating = false;
rec_active = false;
@@ -575,7 +566,7 @@ MidiStreamView::update_rec_regions (boost::shared_ptr<MidiModel> data, nframes_t
gdouble xend = _trackview.editor().frame_to_pixel (region->position() + region->length());
rect->property_x2() = xend;
- ARDOUR::BeatsFramesConverter tconv(_trackview.session().tempo_map(), region->position());
+ ARDOUR::BeatsFramesConverter tconv(_trackview.session()->tempo_map(), region->position());
const MidiModel::TimeType start_beats = tconv.from(start);
/* draw events */
diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc
index c8c34e4369..9344e19943 100644
--- a/gtk2_ardour/midi_time_axis.cc
+++ b/gtk2_ardour/midi_time_axis.cc
@@ -93,7 +93,7 @@ using namespace Editing;
static const uint32_t MIDI_CONTROLS_BOX_MIN_HEIGHT = 162;
static const uint32_t KEYBOARD_MIN_HEIGHT = 140;
-MidiTimeAxisView::MidiTimeAxisView (PublicEditor& ed, Session& sess,
+MidiTimeAxisView::MidiTimeAxisView (PublicEditor& ed, Session* sess,
boost::shared_ptr<Route> rt, Canvas& canvas)
: AxisView(sess) // virtually inherited
, RouteTimeAxisView(ed, sess, rt, canvas)
@@ -718,21 +718,21 @@ MidiTimeAxisView::add_region (nframes64_t pos)
nframes64_t start = pos;
real_editor->snap_to (start, -1);
- const Meter& m = _session.tempo_map().meter_at(start);
- const Tempo& t = _session.tempo_map().tempo_at(start);
- double length = floor (m.frames_per_bar(t, _session.frame_rate()));
+ const Meter& m = _session->tempo_map().meter_at(start);
+ const Tempo& t = _session->tempo_map().tempo_at(start);
+ double length = floor (m.frames_per_bar(t, _session->frame_rate()));
const boost::shared_ptr<MidiDiskstream> diskstream =
boost::dynamic_pointer_cast<MidiDiskstream>(view()->trackview().track()->diskstream());
- boost::shared_ptr<Source> src = _session.create_midi_source_for_session (*diskstream.get());
+ boost::shared_ptr<Source> src = _session->create_midi_source_for_session (*diskstream.get());
boost::shared_ptr<Region> region = (RegionFactory::create (src, 0, (nframes_t) length,
PBD::basename_nosuffix(src->name())));
playlist()->add_region (region, start);
XMLNode &after = playlist()->get_state();
- _session.add_command (new MementoCommand<Playlist> (*playlist().get(), &before, &after));
+ _session->add_command (new MementoCommand<Playlist> (*playlist().get(), &before, &after));
real_editor->commit_reversible_command();
diff --git a/gtk2_ardour/midi_time_axis.h b/gtk2_ardour/midi_time_axis.h
index 85dcd2b9ea..a24ae43f10 100644
--- a/gtk2_ardour/midi_time_axis.h
+++ b/gtk2_ardour/midi_time_axis.h
@@ -57,7 +57,7 @@ class PianoRollHeader;
class MidiTimeAxisView : public RouteTimeAxisView
{
public:
- MidiTimeAxisView (PublicEditor&, ARDOUR::Session&, boost::shared_ptr<ARDOUR::Route>, ArdourCanvas::Canvas& canvas);
+ MidiTimeAxisView (PublicEditor&, ARDOUR::Session*, boost::shared_ptr<ARDOUR::Route>, ArdourCanvas::Canvas& canvas);
virtual ~MidiTimeAxisView ();
MidiStreamView* midi_view();
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc
index 01f67c51fe..bfbdb6ac6e 100644
--- a/gtk2_ardour/mixer_strip.cc
+++ b/gtk2_ardour/mixer_strip.cc
@@ -73,12 +73,12 @@ sigc::signal<void,boost::shared_ptr<Route> > MixerStrip::SwitchIO;
int MixerStrip::scrollbar_height = 0;
-MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, bool in_mixer)
+MixerStrip::MixerStrip (Mixer_UI& mx, Session* sess, bool in_mixer)
: AxisView(sess)
, RouteUI (sess)
,_mixer(mx)
, _mixer_owned (in_mixer)
- , processor_box (sess, sigc::mem_fun(*this, &MixerStrip::plugin_selector), mx.selection(), this, in_mixer)
+ , processor_box (sess, boost::bind (&MixerStrip::plugin_selector, this), mx.selection(), this, in_mixer)
, gpm (sess, 250)
, panners (sess)
, _mono_button (_("Mono"))
@@ -99,7 +99,7 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, bool in_mixer)
}
}
-MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt, bool in_mixer)
+MixerStrip::MixerStrip (Mixer_UI& mx, Session* sess, boost::shared_ptr<Route> rt, bool in_mixer)
: AxisView(sess)
, RouteUI (sess)
,_mixer(mx)
@@ -257,8 +257,8 @@ MixerStrip::init ()
_packed = false;
_embedded = false;
- _session.engine().Stopped.connect (sigc::mem_fun(*this, &MixerStrip::engine_stopped));
- _session.engine().Running.connect (sigc::mem_fun(*this, &MixerStrip::engine_running));
+ _session->engine().Stopped.connect (sigc::mem_fun(*this, &MixerStrip::engine_stopped));
+ _session->engine().Running.connect (sigc::mem_fun(*this, &MixerStrip::engine_running));
input_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MixerStrip::input_press), false);
output_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MixerStrip::output_press), false);
@@ -312,7 +312,7 @@ MixerStrip::init ()
MixerStrip::~MixerStrip ()
{
- GoingAway(); /* EMIT_SIGNAL */
+ drop_references ();
delete input_selector;
delete output_selector;
@@ -363,10 +363,10 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
boost::shared_ptr<AudioTrack> at = audio_track();
- connections.push_back (at->FreezeChange.connect (sigc::mem_fun(*this, &MixerStrip::map_frozen)));
+ connections.add_connection (at->FreezeChange.connect (sigc::mem_fun(*this, &MixerStrip::map_frozen)));
button_table.attach (*rec_enable_button, 0, 2, 2, 3);
- rec_enable_button->set_sensitive (_session.writable());
+ rec_enable_button->set_sensitive (_session->writable());
rec_enable_button->show();
} else if (!is_track()) {
@@ -412,31 +412,22 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
_("Click to Add/Edit Comments"):
_route->comment());
- connections.push_back (_route->meter_change.connect (
- sigc::mem_fun(*this, &MixerStrip::meter_changed)));
- connections.push_back (_route->input()->changed.connect (
- sigc::mem_fun(*this, &MixerStrip::input_changed)));
- connections.push_back (_route->output()->changed.connect (
- sigc::mem_fun(*this, &MixerStrip::output_changed)));
- connections.push_back (_route->route_group_changed.connect (
- sigc::mem_fun(*this, &MixerStrip::route_group_changed)));
+ connections.add_connection (_route->meter_change.connect (sigc::mem_fun(*this, &MixerStrip::meter_changed)));
+ connections.add_connection (_route->input()->changed.connect (sigc::mem_fun(*this, &MixerStrip::input_changed)));
+ connections.add_connection (_route->output()->changed.connect (sigc::mem_fun(*this, &MixerStrip::output_changed)));
+ connections.add_connection (_route->route_group_changed.connect (sigc::mem_fun(*this, &MixerStrip::route_group_changed)));
if (_route->panner()) {
- connections.push_back (_route->panner()->Changed.connect (
- sigc::mem_fun(*this, &MixerStrip::connect_to_pan)));
+ connections.add_connection (_route->panner()->Changed.connect (sigc::mem_fun(*this, &MixerStrip::connect_to_pan)));
}
if (is_audio_track()) {
- connections.push_back (audio_track()->DiskstreamChanged.connect (
- sigc::mem_fun(*this, &MixerStrip::diskstream_changed)));
+ connections.add_connection (audio_track()->DiskstreamChanged.connect (sigc::mem_fun(*this, &MixerStrip::diskstream_changed)));
}
- connections.push_back (_route->NameChanged.connect (
- sigc::mem_fun(*this, &RouteUI::name_changed)));
- connections.push_back (_route->comment_changed.connect (
- sigc::mem_fun(*this, &MixerStrip::comment_changed)));
- connections.push_back (_route->gui_changed.connect (
- sigc::mem_fun(*this, &MixerStrip::route_gui_changed)));
+ connections.add_connection (_route->NameChanged.connect (sigc::mem_fun(*this, &RouteUI::name_changed)));
+ connections.add_connection (_route->comment_changed.connect (sigc::mem_fun(*this, &MixerStrip::comment_changed)));
+ connections.add_connection (_route->gui_changed.connect (sigc::mem_fun(*this, &MixerStrip::route_gui_changed)));
set_stuff_from_route ();
@@ -631,7 +622,7 @@ gint
MixerStrip::output_press (GdkEventButton *ev)
{
using namespace Menu_Helpers;
- if (!_session.engine().connected()) {
+ if (!_session->engine().connected()) {
MessageDialog msg (_("Not connected to JACK - no I/O changes are possible"));
msg.run ();
return true;
@@ -655,7 +646,7 @@ MixerStrip::output_press (GdkEventButton *ev)
ARDOUR::BundleList current = _route->output()->bundles_connected ();
- boost::shared_ptr<ARDOUR::BundleList> b = _session.bundles ();
+ boost::shared_ptr<ARDOUR::BundleList> b = _session->bundles ();
/* give user bundles first chance at being in the menu */
@@ -671,7 +662,7 @@ MixerStrip::output_press (GdkEventButton *ev)
}
}
- boost::shared_ptr<ARDOUR::RouteList> routes = _session.get_routes ();
+ boost::shared_ptr<ARDOUR::RouteList> routes = _session->get_routes ();
for (ARDOUR::RouteList::const_iterator i = routes->begin(); i != routes->end(); ++i) {
maybe_add_bundle_to_output_menu ((*i)->input()->bundle(), current);
}
@@ -709,7 +700,7 @@ MixerStrip::edit_output_configuration ()
output = _route->output ();
}
- output_selector = new IOSelectorWindow (&_session, output);
+ output_selector = new IOSelectorWindow (_session, output);
}
if (output_selector->is_visible()) {
@@ -723,7 +714,7 @@ void
MixerStrip::edit_input_configuration ()
{
if (input_selector == 0) {
- input_selector = new IOSelectorWindow (&_session, _route->input());
+ input_selector = new IOSelectorWindow (_session, _route->input());
}
if (input_selector->is_visible()) {
@@ -742,7 +733,7 @@ MixerStrip::input_press (GdkEventButton *ev)
input_menu.set_name ("ArdourContextMenu");
citems.clear();
- if (!_session.engine().connected()) {
+ if (!_session->engine().connected()) {
MessageDialog msg (_("Not connected to JACK - no I/O changes are possible"));
msg.run ();
return true;
@@ -762,7 +753,7 @@ MixerStrip::input_press (GdkEventButton *ev)
ARDOUR::BundleList current = _route->input()->bundles_connected ();
- boost::shared_ptr<ARDOUR::BundleList> b = _session.bundles ();
+ boost::shared_ptr<ARDOUR::BundleList> b = _session->bundles ();
/* give user bundles first chance at being in the menu */
@@ -778,7 +769,7 @@ MixerStrip::input_press (GdkEventButton *ev)
}
}
- boost::shared_ptr<ARDOUR::RouteList> routes = _session.get_routes ();
+ boost::shared_ptr<ARDOUR::RouteList> routes = _session->get_routes ();
for (ARDOUR::RouteList::const_iterator i = routes->begin(); i != routes->end(); ++i) {
maybe_add_bundle_to_input_menu ((*i)->output()->bundle(), current);
}
@@ -990,7 +981,7 @@ MixerStrip::update_io_button (boost::shared_ptr<ARDOUR::Route> route, Width widt
uint32_t io_count;
uint32_t io_index;
Port *port;
- vector<string> connections;
+ vector<string> port_connections;
uint32_t total_connection_count = 0;
uint32_t io_connection_count = 0;
@@ -1028,13 +1019,13 @@ MixerStrip::update_io_button (boost::shared_ptr<ARDOUR::Route> route, Width widt
} else {
port = route->output()->nth (io_index);
}
-
- connections.clear ();
- port->get_connections(connections);
+
+ port_connections.clear ();
+ port->get_connections(port_connections);
io_connection_count = 0;
- if (!connections.empty()) {
- for (vector<string>::iterator i = connections.begin(); i != connections.end(); ++i) {
+ if (!port_connections.empty()) {
+ for (vector<string>::iterator i = port_connections.begin(); i != port_connections.end(); ++i) {
string& connection_name (*i);
if (io_connection_count == 0) {
diff --git a/gtk2_ardour/mixer_strip.h b/gtk2_ardour/mixer_strip.h
index d5b247019b..64579e0c33 100644
--- a/gtk2_ardour/mixer_strip.h
+++ b/gtk2_ardour/mixer_strip.h
@@ -79,8 +79,8 @@ class RouteGroupMenu;
class MixerStrip : public RouteUI, public Gtk::EventBox
{
public:
- MixerStrip (Mixer_UI&, ARDOUR::Session&, boost::shared_ptr<ARDOUR::Route>, bool in_mixer = true);
- MixerStrip (Mixer_UI&, ARDOUR::Session&, bool in_mixer = true);
+ MixerStrip (Mixer_UI&, ARDOUR::Session*, boost::shared_ptr<ARDOUR::Route>, bool in_mixer = true);
+ MixerStrip (Mixer_UI&, ARDOUR::Session*, bool in_mixer = true);
~MixerStrip ();
void set_width_enum (Width, void* owner);
@@ -167,8 +167,6 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
std::string longest_label;
- sigc::connection newplug_connection;
-
gint mark_update_safe ();
guint32 mode_switch_in_progress;
@@ -216,8 +214,8 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
void input_changed (ARDOUR::IOChange, void *);
void output_changed (ARDOUR::IOChange, void *);
- sigc::connection panstate_connection;
- sigc::connection panstyle_connection;
+ boost::signals2::scoped_connection panstate_connection;
+ boost::signals2::scoped_connection panstyle_connection;
void connect_to_pan ();
void update_diskstream_display ();
@@ -267,7 +265,7 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
void revert_to_default_display ();
void drop_send ();
- sigc::connection send_gone_connection;
+ boost::signals2::scoped_connection send_gone_connection;
void reset_strip_style ();
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index 12dde081af..9ec05c020c 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -64,7 +64,6 @@ using PBD::atoi;
Mixer_UI::Mixer_UI ()
: Window (Gtk::WINDOW_TOPLEVEL)
{
- session = 0;
_strip_width = Config->get_default_narrow_ms() ? Narrow : Wide;
track_menu = 0;
route_group_context_menu = 0;
@@ -313,7 +312,7 @@ Mixer_UI::add_strip (RouteList& routes)
return;
}
- strip = new MixerStrip (*this, *session, route);
+ strip = new MixerStrip (*this, _session, route);
strips.push_back (strip);
Config->get_default_narrow_ms() ? _strip_width = Narrow : _strip_width = Wide;
@@ -336,7 +335,7 @@ Mixer_UI::add_strip (RouteList& routes)
route->NameChanged.connect (sigc::bind (sigc::mem_fun(*this, &Mixer_UI::strip_name_changed), strip));
- strip->GoingAway.connect (sigc::bind (sigc::mem_fun(*this, &Mixer_UI::remove_strip), strip));
+ scoped_connect (strip->GoingAway, boost::bind (&Mixer_UI::remove_strip, this, strip));
strip->WidthChanged.connect (sigc::mem_fun(*this, &Mixer_UI::strip_width_changed));
strip->signal_button_release_event().connect (sigc::bind (sigc::mem_fun(*this, &Mixer_UI::strip_button_release_event), strip));
}
@@ -379,7 +378,7 @@ Mixer_UI::sync_order_keys (string const & src)
TreeModel::Children rows = track_model->children();
TreeModel::Children::iterator ri;
- if (src == N_("signal") || !session || (session->state_of_the_state() & (Session::Loading|Session::Deletion)) || rows.empty()) {
+ if (src == N_("signal") || !_session || (_session->state_of_the_state() & (Session::Loading|Session::Deletion)) || rows.empty()) {
return;
}
@@ -452,14 +451,24 @@ Mixer_UI::strip_button_release_event (GdkEventButton *ev, MixerStrip *strip)
}
void
-Mixer_UI::connect_to_session (Session* sess)
+Mixer_UI::set_session (Session* sess)
{
- session = sess;
+ SessionHandlePtr::set_session (sess);
+
+ if (_plugin_selector) {
+ _plugin_selector->set_session (_session);
+ }
+
+ _group_tabs->set_session (sess);
+
+ if (!_session) {
+ return;
+ }
XMLNode* node = ARDOUR_UI::instance()->mixer_settings();
set_state (*node);
- WindowTitle title(session->name());
+ WindowTitle title(_session->name());
title += _("Mixer");
title += Glib::get_application_name();
@@ -467,30 +476,24 @@ Mixer_UI::connect_to_session (Session* sess)
initial_track_display ();
- session->GoingAway.connect (sigc::mem_fun(*this, &Mixer_UI::disconnect_from_session));
- session->RouteAdded.connect (sigc::mem_fun(*this, &Mixer_UI::add_strip));
- session->route_group_added.connect (sigc::mem_fun(*this, &Mixer_UI::add_route_group));
- session->route_group_removed.connect (sigc::mem_fun(*this, &Mixer_UI::route_groups_changed));
- session->config.ParameterChanged.connect (sigc::mem_fun (*this, &Mixer_UI::parameter_changed));
+ _session_connections.add_connection (_session->RouteAdded.connect (boost::bind (&Mixer_UI::add_strip, this, _1)));
+ _session_connections.add_connection (_session->route_group_added.connect (boost::bind (&Mixer_UI::add_route_group, this, _1)));
+ _session_connections.add_connection (_session->route_group_removed.connect (boost::bind (&Mixer_UI::route_groups_changed, this)));
+ _session_connections.add_connection (_session->config.ParameterChanged.connect (boost::bind (&Mixer_UI::parameter_changed, this, _1)));
route_groups_changed ();
- if (_plugin_selector)
- _plugin_selector->set_session (session);
-
if (_visible) {
show_window();
}
- _group_tabs->connect_to_session (sess);
-
start_updating ();
}
void
-Mixer_UI::disconnect_from_session ()
+Mixer_UI::session_going_away ()
{
- ENSURE_GUI_THREAD (*this, &Mixer_UI::disconnect_from_session)
+ ENSURE_GUI_THREAD (*this, &Mixer_UI::session_going_away)
group_model->clear ();
_selection.clear ();
@@ -500,6 +503,8 @@ Mixer_UI::disconnect_from_session ()
set_title (title.get_string());
stop_updating ();
+
+ SessionHandlePtr::session_going_away ();
}
void
@@ -551,7 +556,7 @@ Mixer_UI::stop_updating ()
void
Mixer_UI::fast_update_strips ()
{
- if (is_mapped () && session) {
+ if (is_mapped () && _session) {
for (list<MixerStrip *>::iterator i = strips.begin(); i != strips.end(); ++i) {
(*i)->fast_update ();
}
@@ -670,7 +675,7 @@ void
Mixer_UI::track_list_reorder (const TreeModel::Path&, const TreeModel::iterator&, int* /*new_order*/)
{
strip_redisplay_does_not_sync_order_keys = true;
- session->set_remote_control_ids();
+ _session->set_remote_control_ids();
redisplay_track_list ();
strip_redisplay_does_not_sync_order_keys = false;
}
@@ -680,7 +685,7 @@ Mixer_UI::track_list_change (const Gtk::TreeModel::Path&, const Gtk::TreeModel::
{
// never reset order keys because of a property change
strip_redisplay_does_not_reset_order_keys = true;
- session->set_remote_control_ids();
+ _session->set_remote_control_ids();
redisplay_track_list ();
strip_redisplay_does_not_reset_order_keys = false;
}
@@ -689,8 +694,10 @@ void
Mixer_UI::track_list_delete (const Gtk::TreeModel::Path&)
{
/* this could require an order sync */
- session->set_remote_control_ids();
- redisplay_track_list ();
+ if (_session && !_session->deletion_in_progress()) {
+ _session->set_remote_control_ids();
+ redisplay_track_list ();
+ }
}
void
@@ -757,7 +764,7 @@ Mixer_UI::redisplay_track_list ()
}
if (!strip_redisplay_does_not_reset_order_keys && !strip_redisplay_does_not_sync_order_keys) {
- session->sync_order_keys (N_("signal"));
+ _session->sync_order_keys (N_("signal"));
}
// Resigc::bind all of the midi controls automatically
@@ -887,7 +894,7 @@ struct SignalOrderRouteSorter {
void
Mixer_UI::initial_track_display ()
{
- boost::shared_ptr<RouteList> routes = session->get_routes();
+ boost::shared_ptr<RouteList> routes = _session->get_routes();
RouteList copy (*routes);
SignalOrderRouteSorter sorter;
@@ -1076,13 +1083,13 @@ Mixer_UI::group_display_button_press (GdkEventButton* ev)
void
Mixer_UI::activate_all_route_groups ()
{
- session->foreach_route_group (sigc::bind (sigc::mem_fun (*this, &Mixer_UI::set_route_group_activation), true));
+ _session->foreach_route_group (sigc::bind (sigc::mem_fun (*this, &Mixer_UI::set_route_group_activation), true));
}
void
Mixer_UI::disable_all_route_groups ()
{
- session->foreach_route_group (sigc::bind (sigc::mem_fun (*this, &Mixer_UI::set_route_group_activation), false));
+ _session->foreach_route_group (sigc::bind (sigc::mem_fun (*this, &Mixer_UI::set_route_group_activation), false));
}
void
@@ -1102,13 +1109,13 @@ Mixer_UI::route_groups_changed ()
row[group_columns.group] = 0;
}
- session->foreach_route_group (sigc::mem_fun (*this, &Mixer_UI::add_route_group));
+ _session->foreach_route_group (sigc::mem_fun (*this, &Mixer_UI::add_route_group));
}
void
Mixer_UI::new_route_group ()
{
- session->add_route_group (new RouteGroup (*session, "", RouteGroup::Active, (RouteGroup::Property) (RouteGroup::Gain |RouteGroup::Mute | RouteGroup::Solo)));
+ _session->add_route_group (new RouteGroup (*_session, "", RouteGroup::Active, (RouteGroup::Property) (RouteGroup::Gain |RouteGroup::Mute | RouteGroup::Solo)));
}
void
@@ -1131,7 +1138,7 @@ Mixer_UI::remove_selected_route_group ()
RouteGroup* rg = (*iter)[group_columns.group];
if (rg) {
- session->remove_route_group (*rg);
+ _session->remove_route_group (*rg);
}
}
}
@@ -1541,7 +1548,7 @@ void
Mixer_UI::parameter_changed (string const & p)
{
if (p == "show-group-tabs") {
- bool const s = session->config.get_show_group_tabs ();
+ bool const s = _session->config.get_show_group_tabs ();
if (s) {
_group_tabs->show ();
} else {
diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h
index 2945e00858..275c0151cd 100644
--- a/gtk2_ardour/mixer_ui.h
+++ b/gtk2_ardour/mixer_ui.h
@@ -33,8 +33,10 @@
#include <gtkmm/treeview.h>
#include "pbd/stateful.h"
+#include "pbd/scoped_connections.h"
#include "ardour/ardour.h"
+#include "ardour/session_handle.h"
#include "route_processor_selection.h"
#include "enums.h"
@@ -42,7 +44,6 @@
namespace ARDOUR {
class Route;
class RouteGroup;
- class Session;
class AudioDiskstream;
};
@@ -50,13 +51,13 @@ class MixerStrip;
class PluginSelector;
class MixerGroupTabs;
-class Mixer_UI : public Gtk::Window
+class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr
{
public:
Mixer_UI ();
~Mixer_UI();
- void connect_to_session (ARDOUR::Session *);
+ void set_session (ARDOUR::Session *);
PluginSelector* plugin_selector();
@@ -81,8 +82,6 @@ class Mixer_UI : public Gtk::Window
RouteRedirectSelection& selection() { return _selection; }
private:
- ARDOUR::Session *session;
-
bool _visible;
Gtk::HBox global_hpacker;
@@ -146,7 +145,7 @@ class Mixer_UI : public Gtk::Window
gint start_updating ();
gint stop_updating ();
- void disconnect_from_session ();
+ void session_going_away ();
sigc::connection fast_screen_update_connection;
void fast_update_strips ();
diff --git a/gtk2_ardour/panner_ui.cc b/gtk2_ardour/panner_ui.cc
index 3c2cfafdfe..7e80c9e641 100644
--- a/gtk2_ardour/panner_ui.cc
+++ b/gtk2_ardour/panner_ui.cc
@@ -48,19 +48,20 @@ using namespace Gtk;
const int PannerUI::pan_bar_height = 30;
-PannerUI::PannerUI (Session& s)
- : _session (s),
- _current_nouts (-1),
- _current_npans (-1),
- hAdjustment(0.0, 0.0, 0.0),
- vAdjustment(0.0, 0.0, 0.0),
- panning_viewport(hAdjustment, vAdjustment),
- panning_up_arrow (Gtk::ARROW_UP, Gtk::SHADOW_OUT),
- panning_down_arrow (Gtk::ARROW_DOWN, Gtk::SHADOW_OUT),
- panning_link_button (_("link")),
- pan_automation_style_button (""),
- pan_automation_state_button ("")
-{
+PannerUI::PannerUI (Session* s)
+ : _current_nouts (-1)
+ , _current_npans (-1)
+ , hAdjustment(0.0, 0.0, 0.0)
+ , vAdjustment(0.0, 0.0, 0.0)
+ , panning_viewport(hAdjustment, vAdjustment)
+ , panning_up_arrow (Gtk::ARROW_UP, Gtk::SHADOW_OUT)
+ , panning_down_arrow (Gtk::ARROW_DOWN, Gtk::SHADOW_OUT)
+ , panning_link_button (_("link"))
+ , pan_automation_style_button ("")
+ , pan_automation_state_button ("")
+{
+ set_session (s);
+
ignore_toggle = false;
pan_menu = 0;
pan_astate_menu = 0;
@@ -133,7 +134,7 @@ PannerUI::PannerUI (Session& s)
void
PannerUI::set_panner (boost::shared_ptr<Panner> p)
{
- connections.clear ();
+ connections.drop_connections ();
delete pan_astyle_menu;
pan_astyle_menu = 0;
@@ -150,9 +151,9 @@ PannerUI::set_panner (boost::shared_ptr<Panner> p)
return;
}
- connections.push_back (_panner->Changed.connect (sigc::mem_fun(*this, &PannerUI::panner_changed)));
- connections.push_back (_panner->LinkStateChanged.connect (sigc::mem_fun(*this, &PannerUI::update_pan_linkage)));
- connections.push_back (_panner->StateChanged.connect (sigc::mem_fun(*this, &PannerUI::update_pan_state)));
+ connections.add_connection (_panner->Changed.connect (sigc::mem_fun(*this, &PannerUI::panner_changed)));
+ connections.add_connection (_panner->LinkStateChanged.connect (sigc::mem_fun(*this, &PannerUI::update_pan_linkage)));
+ connections.add_connection (_panner->StateChanged.connect (sigc::mem_fun(*this, &PannerUI::update_pan_state)));
setup_pan ();
@@ -644,7 +645,7 @@ PannerUI::pan_adjustment_changed (uint32_t which)
the panner objects have no access to the session,
so do this here. ick.
*/
- _session.set_dirty();
+ _session->set_dirty();
}
}
}
diff --git a/gtk2_ardour/panner_ui.h b/gtk2_ardour/panner_ui.h
index bebffec6c0..de889471aa 100644
--- a/gtk2_ardour/panner_ui.h
+++ b/gtk2_ardour/panner_ui.h
@@ -33,6 +33,8 @@
#include <gtkmm2ext/click_box.h>
#include <gtkmm2ext/slider_controller.h>
+#include "ardour/session_handle.h"
+
#include "enums.h"
class Panner2d;
@@ -53,10 +55,10 @@ namespace Gtk {
class Menuitem;
}
-class PannerUI : public Gtk::HBox
+class PannerUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr
{
public:
- PannerUI (ARDOUR::Session&);
+ PannerUI (ARDOUR::Session*);
~PannerUI ();
virtual void set_panner (boost::shared_ptr<ARDOUR::Panner>);
@@ -80,8 +82,7 @@ class PannerUI : public Gtk::HBox
friend class MixerStrip;
boost::shared_ptr<ARDOUR::Panner> _panner;
- ARDOUR::Session& _session;
- std::vector<sigc::connection> connections;
+ PBD::ScopedConnectionList connections;
bool ignore_toggle;
bool in_pan_update;
diff --git a/gtk2_ardour/playlist_selector.cc b/gtk2_ardour/playlist_selector.cc
index abf249fb3d..aa678e80a3 100644
--- a/gtk2_ardour/playlist_selector.cc
+++ b/gtk2_ardour/playlist_selector.cc
@@ -111,7 +111,7 @@ PlaylistSelector::show_for (RouteUI* ruix)
model->clear ();
- session->playlists->foreach (this, &PlaylistSelector::add_playlist_to_map);
+ _session->playlists->foreach (this, &PlaylistSelector::add_playlist_to_map);
this_ds = rui->get_diskstream();
@@ -123,7 +123,7 @@ PlaylistSelector::show_for (RouteUI* ruix)
for (DSPL_Map::iterator x = dspl_map.begin(); x != dspl_map.end(); ++x) {
- boost::shared_ptr<Diskstream> ds = session->diskstream_by_id (x->first);
+ boost::shared_ptr<Diskstream> ds = _session->diskstream_by_id (x->first);
if (ds == 0) {
continue;
@@ -179,7 +179,7 @@ PlaylistSelector::show_for (RouteUI* ruix)
// Add unassigned (imported) playlists to the list
list<boost::shared_ptr<Playlist> > unassigned;
- session->playlists->unassigned (unassigned);
+ _session->playlists->unassigned (unassigned);
TreeModel::Row row;
TreeModel::Row* selected_row = 0;
@@ -236,18 +236,6 @@ PlaylistSelector::add_playlist_to_map (boost::shared_ptr<Playlist> pl)
}
void
-PlaylistSelector::set_session (Session* s)
-{
- ENSURE_GUI_THREAD (*this, &PlaylistSelector::set_session, s)
-
- session = s;
-
- if (session) {
- session->GoingAway.connect (sigc::bind (sigc::mem_fun(*this, &PlaylistSelector::set_session), static_cast<Session*> (0)));
- }
-}
-
-void
PlaylistSelector::close_button_click ()
{
rui = 0;
diff --git a/gtk2_ardour/playlist_selector.h b/gtk2_ardour/playlist_selector.h
index 828607284f..d0b36fae48 100644
--- a/gtk2_ardour/playlist_selector.h
+++ b/gtk2_ardour/playlist_selector.h
@@ -29,6 +29,7 @@
#include <gtkmm2ext/selector.h>
#include "ardour_dialog.h"
+#include "ardour/session_handle.h"
namespace ARDOUR {
class Session;
@@ -44,7 +45,6 @@ class PlaylistSelector : public ArdourDialog
PlaylistSelector ();
~PlaylistSelector ();
- void set_session (ARDOUR::Session*);
void show_for (RouteUI*);
protected:
@@ -53,7 +53,6 @@ class PlaylistSelector : public ArdourDialog
private:
typedef std::map<PBD::ID,std::list<boost::shared_ptr<ARDOUR::Playlist> >*> DSPL_Map;
- ARDOUR::Session* session;
Gtk::ScrolledWindow scroller;
DSPL_Map dspl_map;
RouteUI* rui;
diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc
index 32e43b20da..35befc0d69 100644
--- a/gtk2_ardour/plugin_selector.cc
+++ b/gtk2_ardour/plugin_selector.cc
@@ -72,7 +72,6 @@ PluginSelector::PluginSelector (PluginManager *mgr)
_plugin_menu = 0;
manager = mgr;
- session = 0;
in_row_change = false;
manager->PluginListChanged.connect (sigc::mem_fun (*this, &PluginSelector::build_plugin_menu));
@@ -205,18 +204,6 @@ PluginSelector::row_clicked(GdkEventButton* event)
btn_add_clicked();
}
-void
-PluginSelector::set_session (Session* s)
-{
- ENSURE_GUI_THREAD (*this, &PluginSelector::set_session, s)
-
- session = s;
-
- if (session) {
- session->GoingAway.connect (sigc::bind (sigc::mem_fun(*this, &PluginSelector::set_session), static_cast<Session*> (0)));
- }
-}
-
bool
PluginSelector::show_this_plugin (const PluginInfoPtr& info, const std::string& filterstr)
{
@@ -384,11 +371,11 @@ PluginSelector::au_refiller (const std::string&)
PluginPtr
PluginSelector::load_plugin (PluginInfoPtr pi)
{
- if (session == 0) {
+ if (_session == 0) {
return PluginPtr();
}
- return pi->load (*session);
+ return pi->load (*_session);
}
void
diff --git a/gtk2_ardour/plugin_selector.h b/gtk2_ardour/plugin_selector.h
index 06e746853f..7e0c66b60f 100644
--- a/gtk2_ardour/plugin_selector.h
+++ b/gtk2_ardour/plugin_selector.h
@@ -26,6 +26,7 @@
#include <gtkmm2ext/selector.h>
#include "ardour/plugin.h"
+#include "ardour/session_handle.h"
#include "plugin_interest.h"
namespace ARDOUR {
@@ -43,7 +44,6 @@ class PluginSelector : public ArdourDialog
int run (); // XXX should we try not to overload the non-virtual Gtk::Dialog::run() ?
- void set_session (ARDOUR::Session*);
void on_show ();
Gtk::Menu* plugin_menu ();
@@ -52,7 +52,6 @@ class PluginSelector : public ArdourDialog
private:
PluginInterestedObject* interested_object;
- ARDOUR::Session* session;
Gtk::ScrolledWindow scroller; // Available plugins
Gtk::ScrolledWindow ascroller; // Added plugins
diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc
index cb7491917c..dd2b0b204d 100644
--- a/gtk2_ardour/plugin_ui.cc
+++ b/gtk2_ardour/plugin_ui.cc
@@ -415,8 +415,8 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi)
plugin_analysis_expander.property_expanded().signal_changed().connect( sigc::mem_fun(*this, &PlugUIBase::toggle_plugin_analysis));
plugin_analysis_expander.set_expanded(false);
-
- insert->GoingAway.connect (sigc::mem_fun (*this, &PlugUIBase::plugin_going_away));
+
+ death_connection = insert->GoingAway.connect (sigc::mem_fun (*this, &PlugUIBase::plugin_going_away));
}
PlugUIBase::~PlugUIBase()
@@ -430,6 +430,7 @@ PlugUIBase::plugin_going_away ()
/* drop references to the plugin/insert */
insert.reset ();
plugin.reset ();
+ death_connection.disconnect ();
}
void
diff --git a/gtk2_ardour/plugin_ui.h b/gtk2_ardour/plugin_ui.h
index 221c1d71f1..cf1bcd0ed8 100644
--- a/gtk2_ardour/plugin_ui.h
+++ b/gtk2_ardour/plugin_ui.h
@@ -121,6 +121,7 @@ class PlugUIBase : public virtual sigc::trackable
void toggle_plugin_analysis ();
void processor_active_changed (boost::weak_ptr<ARDOUR::Processor> p);
void plugin_going_away ();
+ boost::signals2::scoped_connection death_connection;
};
class GenericPluginUI : public PlugUIBase, public Gtk::VBox
@@ -260,7 +261,7 @@ class PluginUIWindow : public Gtk::Window
private:
Glib::ustring _title;
PlugUIBase* _pluginui;
- sigc::connection death_connection;
+ boost::signals2::scoped_connection death_connection;
Gtk::Window* parent;
Gtk::VBox vbox;
bool non_gtk_gui;
diff --git a/gtk2_ardour/point_selection.h b/gtk2_ardour/point_selection.h
index 0b89f34454..1b442d279b 100644
--- a/gtk2_ardour/point_selection.h
+++ b/gtk2_ardour/point_selection.h
@@ -21,6 +21,7 @@
#define __ardour_gtk_point_selection_h__
#include <list>
+#include <boost/noncopyable.hpp>
#include "automation_selectable.h"
diff --git a/gtk2_ardour/port_group.cc b/gtk2_ardour/port_group.cc
index 1d36a52364..11e75c1fc3 100644
--- a/gtk2_ardour/port_group.cc
+++ b/gtk2_ardour/port_group.cc
@@ -50,6 +50,14 @@ PortGroup::PortGroup (std::string const & n)
}
+PortGroup::~PortGroup()
+{
+ for (BundleList::iterator i = _bundles.begin(); i != _bundles.end(); ++i) {
+ delete *i;
+ }
+ _bundles.clear ();
+}
+
/** Add a bundle to a group.
* @param b Bundle.
* @param allow_dups true to allow the group to contain more than one bundle with the same port, otherwise false.
@@ -80,6 +88,14 @@ PortGroup::add_bundle (boost::shared_ptr<Bundle> b, boost::shared_ptr<IO> io, Gd
add_bundle_internal (b, io, true, c, false);
}
+PortGroup::BundleRecord::BundleRecord (boost::shared_ptr<ARDOUR::Bundle> b, boost::shared_ptr<ARDOUR::IO> iop, Gdk::Color c, bool has_c)
+ : bundle (b)
+ , io (iop)
+ , colour (c)
+ , has_colour (has_c)
+{
+}
+
void
PortGroup::add_bundle_internal (boost::shared_ptr<Bundle> b, boost::shared_ptr<IO> io, bool has_colour, Gdk::Color colour, bool allow_dups)
{
@@ -90,7 +106,7 @@ PortGroup::add_bundle_internal (boost::shared_ptr<Bundle> b, boost::shared_ptr<I
/* don't add this bundle if we already have one with the same ports */
BundleList::iterator i = _bundles.begin ();
- while (i != _bundles.end() && b->has_same_ports (i->bundle) == false) {
+ while (i != _bundles.end() && b->has_same_ports ((*i)->bundle) == false) {
++i;
}
@@ -99,14 +115,9 @@ PortGroup::add_bundle_internal (boost::shared_ptr<Bundle> b, boost::shared_ptr<I
}
}
- BundleRecord r;
- r.bundle = b;
- r.io = io;
- r.colour = colour;
- r.has_colour = has_colour;
- r.changed_connection = b->Changed.connect (sigc::mem_fun (*this, &PortGroup::bundle_changed));
-
- _bundles.push_back (r);
+ BundleRecord* br = new BundleRecord (b, io, colour, has_colour);
+ br->changed_connection = b->Changed.connect (boost::bind (&PortGroup::bundle_changed, this, _1));
+ _bundles.push_back (br);
Changed ();
}
@@ -117,7 +128,7 @@ PortGroup::remove_bundle (boost::shared_ptr<Bundle> b)
assert (b.get());
BundleList::iterator i = _bundles.begin ();
- while (i != _bundles.end() && i->bundle != b) {
+ while (i != _bundles.end() && (*i)->bundle != b) {
++i;
}
@@ -125,7 +136,7 @@ PortGroup::remove_bundle (boost::shared_ptr<Bundle> b)
return;
}
- i->changed_connection.disconnect ();
+ delete *i;
_bundles.erase (i);
Changed ();
@@ -142,7 +153,7 @@ void
PortGroup::clear ()
{
for (BundleList::iterator i = _bundles.begin(); i != _bundles.end(); ++i) {
- i->changed_connection.disconnect ();
+ delete *i;
}
_bundles.clear ();
@@ -153,7 +164,7 @@ bool
PortGroup::has_port (std::string const& p) const
{
for (BundleList::const_iterator i = _bundles.begin(); i != _bundles.end(); ++i) {
- if (i->bundle->offers_port_alone (p)) {
+ if ((*i)->bundle->offers_port_alone (p)) {
return true;
}
}
@@ -165,7 +176,7 @@ boost::shared_ptr<Bundle>
PortGroup::only_bundle ()
{
assert (_bundles.size() == 1);
- return _bundles.front().bundle;
+ return _bundles.front()->bundle;
}
@@ -174,7 +185,7 @@ PortGroup::total_channels () const
{
uint32_t n = 0;
for (BundleList::const_iterator i = _bundles.begin(); i != _bundles.end(); ++i) {
- n += i->bundle->nchannels ();
+ n += (*i)->bundle->nchannels ();
}
return n;
@@ -184,7 +195,7 @@ boost::shared_ptr<IO>
PortGroup::io_from_bundle (boost::shared_ptr<ARDOUR::Bundle> b) const
{
BundleList::const_iterator i = _bundles.begin ();
- while (i != _bundles.end() && i->bundle != b) {
+ while (i != _bundles.end() && (*i)->bundle != b) {
++i;
}
@@ -192,7 +203,7 @@ PortGroup::io_from_bundle (boost::shared_ptr<ARDOUR::Bundle> b) const
return boost::shared_ptr<IO> ();
}
- return i->io;
+ return (*i)->io;
}
@@ -204,6 +215,11 @@ PortGroupList::PortGroupList ()
}
+PortGroupList::~PortGroupList()
+{
+ /* XXX need to clean up bundles, but ownership shared with PortGroups */
+}
+
void
PortGroupList::set_type (DataType t)
{
@@ -272,7 +288,7 @@ PortGroupList::gather (ARDOUR::Session* session, bool inputs, bool allow_dups)
route_bundles.push_back (io->bundle ());
- (*i)->foreach_processor (sigc::bind (sigc::mem_fun (*this, &PortGroupList::maybe_add_processor_to_list), &route_bundles, inputs, used_io));
+ (*i)->foreach_processor (boost::bind (&PortGroupList::maybe_add_processor_to_list, this, _1, &route_bundles, inputs, used_io));
/* Work out which group to put these bundles in */
boost::shared_ptr<PortGroup> g;
@@ -463,13 +479,7 @@ void
PortGroupList::clear ()
{
_groups.clear ();
-
- for (std::vector<sigc::connection>::iterator i = _bundle_changed_connections.begin(); i != _bundle_changed_connections.end(); ++i) {
- i->disconnect ();
- }
-
- _bundle_changed_connections.clear ();
-
+ _bundle_changed_connections.drop_connections ();
emit_changed ();
}
@@ -513,9 +523,7 @@ PortGroupList::add_group (boost::shared_ptr<PortGroup> g)
g->Changed.connect (sigc::mem_fun (*this, &PortGroupList::emit_changed));
- _bundle_changed_connections.push_back (
- g->BundleChanged.connect (sigc::mem_fun (*this, &PortGroupList::emit_bundle_changed))
- );
+ _bundle_changed_connections.add_connection (g->BundleChanged.connect (sigc::mem_fun (*this, &PortGroupList::emit_bundle_changed)));
emit_changed ();
}
diff --git a/gtk2_ardour/port_group.h b/gtk2_ardour/port_group.h
index 1fcceb4c19..ebab997699 100644
--- a/gtk2_ardour/port_group.h
+++ b/gtk2_ardour/port_group.h
@@ -23,9 +23,12 @@
#include <vector>
#include <string>
#include <set>
+#include <boost/shared_ptr.hpp>
+#include <boost/signals2.hpp>
+
#include <gtkmm/widget.h>
#include <gtkmm/checkbutton.h>
-#include <boost/shared_ptr.hpp>
+
#include "ardour/data_type.h"
#include "ardour/types.h"
@@ -47,6 +50,7 @@ class PortGroup : public sigc::trackable
{
public:
PortGroup (std::string const & n);
+ ~PortGroup ();
void add_bundle (boost::shared_ptr<ARDOUR::Bundle>, bool allow_dups = false);
void add_bundle (boost::shared_ptr<ARDOUR::Bundle>, boost::shared_ptr<ARDOUR::IO> io);
@@ -65,19 +69,21 @@ public:
sigc::signal<void> Changed;
/** An individual bundle on our list has changed in some way */
- sigc::signal<void, ARDOUR::Bundle::Change> BundleChanged;
+ boost::signals2::signal<void(ARDOUR::Bundle::Change)> BundleChanged;
struct BundleRecord {
- boost::shared_ptr<ARDOUR::Bundle> bundle;
- /** IO whose ports are in the bundle, or 0. This is so that we can do things like adding
- ports to the IO from matrix editor menus. */
- boost::shared_ptr<ARDOUR::IO> io;
- Gdk::Color colour;
- bool has_colour;
- sigc::connection changed_connection;
+ boost::shared_ptr<ARDOUR::Bundle> bundle;
+ /** IO whose ports are in the bundle, or 0. This is so that we can do things like adding
+ ports to the IO from matrix editor menus. */
+ boost::shared_ptr<ARDOUR::IO> io;
+ Gdk::Color colour;
+ bool has_colour;
+ boost::signals2::scoped_connection changed_connection;
+
+ BundleRecord (boost::shared_ptr<ARDOUR::Bundle>, boost::shared_ptr<ARDOUR::IO>, Gdk::Color, bool has_colour);
};
- typedef std::list<BundleRecord> BundleList;
+ typedef std::list<BundleRecord*> BundleList;
BundleList const & bundles () const {
return _bundles;
@@ -95,6 +101,7 @@ class PortGroupList : public sigc::trackable
{
public:
PortGroupList ();
+ ~PortGroupList();
typedef std::vector<boost::shared_ptr<PortGroup> > List;
@@ -125,10 +132,10 @@ class PortGroupList : public sigc::trackable
bool empty () const;
/** The group list has changed in some way; a group has been added or removed, or the list cleared etc. */
- sigc::signal<void> Changed;
+ boost::signals2::signal<void()> Changed;
/** A bundle in one of our groups has changed */
- sigc::signal<void, ARDOUR::Bundle::Change> BundleChanged;
+ boost::signals2::signal<void(ARDOUR::Bundle::Change)> BundleChanged;
private:
bool port_has_prefix (std::string const &, std::string const &) const;
@@ -144,7 +151,7 @@ class PortGroupList : public sigc::trackable
ARDOUR::DataType _type;
mutable PortGroup::BundleList _bundles;
List _groups;
- std::vector<sigc::connection> _bundle_changed_connections;
+ PBD::ScopedConnectionList _bundle_changed_connections;
bool _signals_suspended;
bool _pending_change;
ARDOUR::Bundle::Change _pending_bundle_change;
diff --git a/gtk2_ardour/port_matrix.cc b/gtk2_ardour/port_matrix.cc
index b9285de7c7..9d5187ca2e 100644
--- a/gtk2_ardour/port_matrix.cc
+++ b/gtk2_ardour/port_matrix.cc
@@ -45,19 +45,20 @@ using namespace ARDOUR;
* @param type Port type that we are handling.
*/
PortMatrix::PortMatrix (Window* parent, Session* session, DataType type)
- : Table (3, 3),
- _session (session),
- _parent (parent),
- _type (type),
- _menu (0),
- _arrangement (TOP_TO_RIGHT),
- _row_index (0),
- _column_index (1),
- _min_height_divisor (1),
- _show_only_bundles (false),
- _inhibit_toggle_show_only_bundles (false),
- _ignore_notebook_page_selected (false)
-{
+ : Table (3, 3)
+ , _parent (parent)
+ , _type (type)
+ , _menu (0)
+ , _arrangement (TOP_TO_RIGHT)
+ , _row_index (0)
+ , _column_index (1)
+ , _min_height_divisor (1)
+ , _show_only_bundles (false)
+ , _inhibit_toggle_show_only_bundles (false)
+ , _ignore_notebook_page_selected (false)
+{
+ set_session (session);
+
_body = new PortMatrixBody (this);
_body->DimensionsChanged.connect (sigc::mem_fun (*this, &PortMatrix::body_dimensions_changed));
@@ -148,15 +149,13 @@ PortMatrix::init ()
/* Part 2: notice when things have changed that require our subclass to clear and refill _ports[] */
/* watch for routes being added or removed */
- _session->RouteAdded.connect (sigc::hide (sigc::mem_fun (*this, &PortMatrix::routes_changed)));
+ _session_connections.add_connection (_session->RouteAdded.connect (boost::bind (&PortMatrix::routes_changed, this)));
/* and also bundles */
- _session->BundleAdded.connect (sigc::hide (sigc::mem_fun (*this, &PortMatrix::setup_global_ports)));
+ _session_connections.add_connection (_session->BundleAdded.connect (boost::bind (&PortMatrix::setup_global_ports, this)));
/* and also ports */
- _session->engine().PortRegisteredOrUnregistered.connect (sigc::mem_fun (*this, &PortMatrix::setup_global_ports));
-
- _session->GoingAway.connect (sigc::mem_fun (*this, &PortMatrix::session_going_away));
+ _session_connections.add_connection (_session->engine().PortRegisteredOrUnregistered.connect (boost::bind (&PortMatrix::setup_global_ports, this)));
reconnect_to_routes ();
@@ -167,16 +166,11 @@ PortMatrix::init ()
void
PortMatrix::reconnect_to_routes ()
{
- for (vector<sigc::connection>::iterator i = _route_connections.begin(); i != _route_connections.end(); ++i) {
- i->disconnect ();
- }
- _route_connections.clear ();
+ _route_connections.drop_connections ();
boost::shared_ptr<RouteList> routes = _session->get_routes ();
for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) {
- _route_connections.push_back (
- (*i)->processors_changed.connect (sigc::mem_fun (*this, &PortMatrix::route_processors_changed))
- );
+ _route_connections.add_connection ((*i)->processors_changed.connect (sigc::mem_fun (*this, &PortMatrix::route_processors_changed)));
}
}
@@ -261,13 +255,13 @@ PortMatrix::disassociate_all ()
PortGroup::BundleList b = _ports[1].bundles ();
for (PortGroup::BundleList::iterator i = a.begin(); i != a.end(); ++i) {
- for (uint32_t j = 0; j < i->bundle->nchannels(); ++j) {
+ for (uint32_t j = 0; j < (*i)->bundle->nchannels(); ++j) {
for (PortGroup::BundleList::iterator k = b.begin(); k != b.end(); ++k) {
- for (uint32_t l = 0; l < k->bundle->nchannels(); ++l) {
+ for (uint32_t l = 0; l < (*k)->bundle->nchannels(); ++l) {
BundleChannel c[2] = {
- BundleChannel (i->bundle, j),
- BundleChannel (k->bundle, l)
+ BundleChannel ((*i)->bundle, j),
+ BundleChannel ((*k)->bundle, l)
};
if (get_state (c) == PortMatrixNode::ASSOCIATED) {
@@ -493,11 +487,11 @@ PortMatrix::disassociate_all_on_channel (boost::weak_ptr<Bundle> bundle, uint32_
PortGroup::BundleList a = _ports[1-dim].bundles ();
for (PortGroup::BundleList::iterator i = a.begin(); i != a.end(); ++i) {
- for (uint32_t j = 0; j < i->bundle->nchannels(); ++j) {
+ for (uint32_t j = 0; j < (*i)->bundle->nchannels(); ++j) {
BundleChannel c[2];
c[dim] = BundleChannel (sb, channel);
- c[1-dim] = BundleChannel (i->bundle, j);
+ c[1-dim] = BundleChannel ((*i)->bundle, j);
if (get_state (c) == PortMatrixNode::ASSOCIATED) {
set_state (c, false);
diff --git a/gtk2_ardour/port_matrix.h b/gtk2_ardour/port_matrix.h
index cfa4cdbadc..950d5bfd32 100644
--- a/gtk2_ardour/port_matrix.h
+++ b/gtk2_ardour/port_matrix.h
@@ -28,8 +28,11 @@
#include <gtkmm/checkbutton.h>
#include <gtkmm/notebook.h>
#include <boost/shared_ptr.hpp>
+
#include "ardour/bundle.h"
#include "ardour/types.h"
+#include "ardour/session_handle.h"
+
#include "port_group.h"
#include "port_matrix_types.h"
#include "i18n.h"
@@ -55,7 +58,7 @@ namespace Gtk {
class PortMatrixBody;
-class PortMatrix : public Gtk::Table
+class PortMatrix : public Gtk::Table, public ARDOUR::SessionHandlePtr
{
public:
PortMatrix (Gtk::Window*, ARDOUR::Session *, ARDOUR::DataType);
@@ -160,7 +163,6 @@ protected:
from left to right as you go from list 0 to list 1. Hence subclasses which deal with
inputs and outputs should put outputs in list 0 and inputs in list 1. */
PortGroupList _ports[2];
- ARDOUR::Session* _session;
private:
@@ -190,7 +192,7 @@ private:
/// port type that we are working with
ARDOUR::DataType _type;
- std::vector<sigc::connection> _route_connections;
+ PBD::ScopedConnectionList _route_connections;
PortMatrixBody* _body;
Gtk::HScrollbar _hscroll;
diff --git a/gtk2_ardour/port_matrix_body.cc b/gtk2_ardour/port_matrix_body.cc
index 847ee2f2ca..f448952c4a 100644
--- a/gtk2_ardour/port_matrix_body.cc
+++ b/gtk2_ardour/port_matrix_body.cc
@@ -246,10 +246,7 @@ PortMatrixBody::setup ()
{
/* Discard any old connections to bundles */
- for (list<sigc::connection>::iterator i = _bundle_connections.begin(); i != _bundle_connections.end(); ++i) {
- i->disconnect ();
- }
- _bundle_connections.clear ();
+ _bundle_connections.drop_connections ();
/* Connect to bundles so that we find out when their names change */
@@ -257,9 +254,7 @@ PortMatrixBody::setup ()
PortGroup::BundleList r = _matrix->visible_rows()->bundles ();
for (PortGroup::BundleList::iterator i = r.begin(); i != r.end(); ++i) {
- _bundle_connections.push_back (
- i->bundle->Changed.connect (sigc::hide (sigc::mem_fun (*this, &PortMatrixBody::rebuild_and_draw_row_labels)))
- );
+ _bundle_connections.add_connection ((*i)->bundle->Changed.connect (boost::bind (&PortMatrixBody::rebuild_and_draw_row_labels, this)));
}
}
@@ -267,9 +262,7 @@ PortMatrixBody::setup ()
if (_matrix->visible_columns()) {
PortGroup::BundleList c = _matrix->visible_columns()->bundles ();
for (PortGroup::BundleList::iterator i = c.begin(); i != c.end(); ++i) {
- _bundle_connections.push_back (
- i->bundle->Changed.connect (sigc::hide (sigc::mem_fun (*this, &PortMatrixBody::rebuild_and_draw_column_labels)))
- );
+ _bundle_connections.add_connection ((*i)->bundle->Changed.connect (boost::bind (&PortMatrixBody::rebuild_and_draw_column_labels, this)));
}
}
@@ -470,8 +463,8 @@ PortMatrixBody::highlight_associated_channels (int dim, ARDOUR::BundleChannel h)
PortGroup::BundleList const b = _matrix->visible_ports(1 - dim)->bundles ();
for (PortGroup::BundleList::const_iterator i = b.begin(); i != b.end(); ++i) {
- for (uint32_t j = 0; j < i->bundle->nchannels(); ++j) {
- bc[1 - dim] = ARDOUR::BundleChannel (i->bundle, j);
+ for (uint32_t j = 0; j < (*i)->bundle->nchannels(); ++j) {
+ bc[1 - dim] = ARDOUR::BundleChannel ((*i)->bundle, j);
if (_matrix->get_state (bc) == PortMatrixNode::ASSOCIATED) {
if (dim == _matrix->column_index()) {
_row_labels->add_channel_highlight (bc[1 - dim]);
diff --git a/gtk2_ardour/port_matrix_body.h b/gtk2_ardour/port_matrix_body.h
index 0b8facda45..23d07c6ff3 100644
--- a/gtk2_ardour/port_matrix_body.h
+++ b/gtk2_ardour/port_matrix_body.h
@@ -104,7 +104,7 @@ private:
std::list<PortMatrixNode> _mouseover;
bool _ignore_component_size_changed;
- std::list<sigc::connection> _bundle_connections;
+ PBD::ScopedConnectionList _bundle_connections;
};
#endif
diff --git a/gtk2_ardour/port_matrix_column_labels.cc b/gtk2_ardour/port_matrix_column_labels.cc
index be26474e75..522015548f 100644
--- a/gtk2_ardour/port_matrix_column_labels.cc
+++ b/gtk2_ardour/port_matrix_column_labels.cc
@@ -55,16 +55,16 @@ PortMatrixColumnLabels::compute_dimensions ()
for (PortGroup::BundleList::const_iterator j = c.begin (); j != c.end(); ++j) {
cairo_text_extents_t ext;
- cairo_text_extents (cr, j->bundle->name().c_str(), &ext);
+ cairo_text_extents (cr, (*j)->bundle->name().c_str(), &ext);
if (ext.width > _longest_bundle_name) {
_longest_bundle_name = ext.width;
}
- for (uint32_t k = 0; k < j->bundle->nchannels (); ++k) {
+ for (uint32_t k = 0; k < (*j)->bundle->nchannels (); ++k) {
cairo_text_extents (
cr,
- j->bundle->channel_name (k).c_str(),
+ (*j)->bundle->channel_name (k).c_str(),
&ext
);
@@ -127,13 +127,13 @@ PortMatrixColumnLabels::render (cairo_t* cr)
PortGroup::BundleList const & bundles = _matrix->visible_columns()->bundles ();
for (PortGroup::BundleList::const_iterator i = bundles.begin (); i != bundles.end(); ++i) {
- Gdk::Color c = i->has_colour ? i->colour : get_a_bundle_colour (N);
- render_bundle_name (cr, background_colour (), c, x, 0, i->bundle);
+ Gdk::Color c = (*i)->has_colour ? (*i)->colour : get_a_bundle_colour (N);
+ render_bundle_name (cr, background_colour (), c, x, 0, (*i)->bundle);
if (_matrix->show_only_bundles()) {
x += grid_spacing();
} else {
- x += i->bundle->nchannels () * grid_spacing();
+ x += (*i)->bundle->nchannels () * grid_spacing();
}
++N;
@@ -147,9 +147,9 @@ PortMatrixColumnLabels::render (cairo_t* cr)
for (PortGroup::BundleList::const_iterator i = bundles.begin (); i != bundles.end(); ++i) {
- for (uint32_t j = 0; j < i->bundle->nchannels(); ++j) {
- Gdk::Color c = i->has_colour ? i->colour : get_a_bundle_colour (N);
- render_channel_name (cr, background_colour (), c, x, 0, ARDOUR::BundleChannel (i->bundle, j));
+ for (uint32_t j = 0; j < (*i)->bundle->nchannels(); ++j) {
+ Gdk::Color c = (*i)->has_colour ? (*i)->colour : get_a_bundle_colour (N);
+ render_channel_name (cr, background_colour (), c, x, 0, ARDOUR::BundleChannel ((*i)->bundle, j));
x += grid_spacing();
}
diff --git a/gtk2_ardour/port_matrix_component.cc b/gtk2_ardour/port_matrix_component.cc
index d98c557c3a..f728f7bd85 100644
--- a/gtk2_ardour/port_matrix_component.cc
+++ b/gtk2_ardour/port_matrix_component.cc
@@ -131,7 +131,7 @@ PortMatrixComponent::group_size (boost::shared_ptr<const PortGroup> g) const
s = bundles.size();
} else {
for (PortGroup::BundleList::const_iterator i = bundles.begin(); i != bundles.end(); ++i) {
- s += i->bundle->nchannels();
+ s += (*i)->bundle->nchannels();
}
}
@@ -151,7 +151,7 @@ PortMatrixComponent::channel_to_position (ARDOUR::BundleChannel bc, boost::share
for (PortGroup::BundleList::const_iterator i = bundles.begin(); i != bundles.end(); ++i) {
- if (i->bundle == bc.bundle) {
+ if ((*i)->bundle == bc.bundle) {
/* found the bundle */
@@ -168,7 +168,7 @@ PortMatrixComponent::channel_to_position (ARDOUR::BundleChannel bc, boost::share
if (_matrix->show_only_bundles()) {
p += 1;
} else {
- p += i->bundle->nchannels ();
+ p += (*i)->bundle->nchannels ();
}
}
@@ -187,16 +187,16 @@ PortMatrixComponent::position_to_channel (double p, double, boost::shared_ptr<co
if (_matrix->show_only_bundles()) {
if (p < 1) {
- return ARDOUR::BundleChannel (j->bundle, -1);
+ return ARDOUR::BundleChannel ((*j)->bundle, -1);
} else {
p -= 1;
}
} else {
- uint32_t const s = j->bundle->nchannels ();
+ uint32_t const s = (*j)->bundle->nchannels ();
if (p < s) {
- return ARDOUR::BundleChannel (j->bundle, p);
+ return ARDOUR::BundleChannel ((*j)->bundle, p);
} else {
p -= s;
}
diff --git a/gtk2_ardour/port_matrix_grid.cc b/gtk2_ardour/port_matrix_grid.cc
index 3e5d171690..fdfe45b224 100644
--- a/gtk2_ardour/port_matrix_grid.cc
+++ b/gtk2_ardour/port_matrix_grid.cc
@@ -81,7 +81,7 @@ PortMatrixGrid::render (cairo_t* cr)
if (!_matrix->show_only_bundles()) {
cairo_set_line_width (cr, thin_grid_line_width());
- for (uint32_t j = 0; j < i->bundle->nchannels(); ++j) {
+ for (uint32_t j = 0; j < (*i)->bundle->nchannels(); ++j) {
x += grid_spacing ();
cairo_move_to (cr, x, 0);
cairo_line_to (cr, x, _height);
@@ -111,7 +111,7 @@ PortMatrixGrid::render (cairo_t* cr)
if (!_matrix->show_only_bundles()) {
cairo_set_line_width (cr, thin_grid_line_width());
- for (uint32_t j = 0; j < i->bundle->nchannels(); ++j) {
+ for (uint32_t j = 0; j < (*i)->bundle->nchannels(); ++j) {
y += grid_spacing ();
cairo_move_to (cr, 0, y);
cairo_line_to (cr, _width, y);
@@ -140,8 +140,8 @@ PortMatrixGrid::render (cairo_t* cr)
for (PortGroup::BundleList::const_iterator j = row_bundles.begin(); j != row_bundles.end(); ++j) {
PortMatrixNode::State s = get_association (PortMatrixNode (
- ARDOUR::BundleChannel (i->bundle, 0),
- ARDOUR::BundleChannel (j->bundle, 0)
+ ARDOUR::BundleChannel ((*i)->bundle, 0),
+ ARDOUR::BundleChannel ((*j)->bundle, 0)
));
switch (s) {
case PortMatrixNode::ASSOCIATED:
@@ -169,14 +169,14 @@ PortMatrixGrid::render (cairo_t* cr)
for (PortGroup::BundleList::const_iterator j = row_bundles.begin(); j != row_bundles.end(); ++j) {
x = bx;
- for (uint32_t k = 0; k < i->bundle->nchannels (); ++k) {
+ for (uint32_t k = 0; k < (*i)->bundle->nchannels (); ++k) {
y = by;
- for (uint32_t l = 0; l < j->bundle->nchannels (); ++l) {
+ for (uint32_t l = 0; l < (*j)->bundle->nchannels (); ++l) {
ARDOUR::BundleChannel c[2];
- c[_matrix->column_index()] = ARDOUR::BundleChannel (i->bundle, k);
- c[_matrix->row_index()] = ARDOUR::BundleChannel (j->bundle, l);
+ c[_matrix->column_index()] = ARDOUR::BundleChannel ((*i)->bundle, k);
+ c[_matrix->row_index()] = ARDOUR::BundleChannel ((*j)->bundle, l);
PortMatrixNode::State const s = _matrix->get_state (c);
@@ -198,10 +198,10 @@ PortMatrixGrid::render (cairo_t* cr)
x += grid_spacing();
}
- by += j->bundle->nchannels () * grid_spacing();
+ by += (*j)->bundle->nchannels () * grid_spacing();
}
- bx += i->bundle->nchannels () * grid_spacing();
+ bx += (*i)->bundle->nchannels () * grid_spacing();
}
}
}
diff --git a/gtk2_ardour/port_matrix_row_labels.cc b/gtk2_ardour/port_matrix_row_labels.cc
index 80a0bb0c4f..2bf2b70a27 100644
--- a/gtk2_ardour/port_matrix_row_labels.cc
+++ b/gtk2_ardour/port_matrix_row_labels.cc
@@ -54,16 +54,16 @@ PortMatrixRowLabels::compute_dimensions ()
PortGroup::BundleList const r = (*i)->bundles ();
for (PortGroup::BundleList::const_iterator j = r.begin(); j != r.end(); ++j) {
- for (uint32_t k = 0; k < j->bundle->nchannels(); ++k) {
+ for (uint32_t k = 0; k < (*j)->bundle->nchannels(); ++k) {
cairo_text_extents_t ext;
- cairo_text_extents (cr, j->bundle->channel_name(k).c_str(), &ext);
+ cairo_text_extents (cr, (*j)->bundle->channel_name(k).c_str(), &ext);
if (ext.width > _longest_port_name) {
_longest_port_name = ext.width;
}
}
cairo_text_extents_t ext;
- cairo_text_extents (cr, j->bundle->name().c_str(), &ext);
+ cairo_text_extents (cr, (*j)->bundle->name().c_str(), &ext);
if (ext.width > _longest_bundle_name) {
_longest_bundle_name = ext.width;
}
@@ -107,12 +107,12 @@ PortMatrixRowLabels::render (cairo_t* cr)
PortGroup::BundleList const & bundles = _matrix->visible_rows()->bundles ();
for (PortGroup::BundleList::const_iterator i = bundles.begin(); i != bundles.end(); ++i) {
- render_bundle_name (cr, background_colour (), i->has_colour ? i->colour : get_a_bundle_colour (N), 0, y, i->bundle);
+ render_bundle_name (cr, background_colour (), (*i)->has_colour ? (*i)->colour : get_a_bundle_colour (N), 0, y, (*i)->bundle);
if (!_matrix->show_only_bundles()) {
- for (uint32_t j = 0; j < i->bundle->nchannels(); ++j) {
- Gdk::Color c = i->has_colour ? i->colour : get_a_bundle_colour (M);
- render_channel_name (cr, background_colour (), c, 0, y, ARDOUR::BundleChannel (i->bundle, j));
+ for (uint32_t j = 0; j < (*i)->bundle->nchannels(); ++j) {
+ Gdk::Color c = (*i)->has_colour ? (*i)->colour : get_a_bundle_colour (M);
+ render_channel_name (cr, background_colour (), c, 0, y, ARDOUR::BundleChannel ((*i)->bundle, j));
y += grid_spacing();
++M;
}
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc
index ab6d9f546d..3e07305868 100644
--- a/gtk2_ardour/processor_box.cc
+++ b/gtk2_ardour/processor_box.cc
@@ -270,16 +270,17 @@ SendProcessorEntry::set_pixel_width (int p)
_fader.set_fader_length (p);
}
-ProcessorBox::ProcessorBox (ARDOUR::Session& sess, sigc::slot<PluginSelector*> get_plugin_selector,
- RouteRedirectSelection& rsel, MixerStrip* parent, bool owner_is_mixer)
- : _session(sess)
- , _parent_strip (parent)
+ProcessorBox::ProcessorBox (ARDOUR::Session* sess, boost::function<PluginSelector*()> get_plugin_selector,
+ RouteRedirectSelection& rsel, MixerStrip* parent, bool owner_is_mixer)
+ : _parent_strip (parent)
, _owner_is_mixer (owner_is_mixer)
, ab_direction (true)
, _get_plugin_selector (get_plugin_selector)
, _placement(PreFader)
, _rr_selection(rsel)
{
+ set_session (sess);
+
_width = Wide;
processor_menu = 0;
send_action_menu = 0;
@@ -319,17 +320,15 @@ ProcessorBox::set_route (boost::shared_ptr<Route> r)
return;
}
- connections.clear ();
+ connections.drop_connections();
/* new route: any existing block on processor redisplay must be meaningless */
no_processor_redisplay = false;
_route = r;
- connections.push_back (_route->processors_changed.connect (sigc::mem_fun (*this, &ProcessorBox::route_processors_changed)));
- connections.push_back (_route->GoingAway.connect (
- sigc::mem_fun (*this, &ProcessorBox::route_going_away)));
- connections.push_back (_route->NameChanged.connect (
- sigc::mem_fun(*this, &ProcessorBox::route_name_changed)));
+ connections.add_connection (_route->processors_changed.connect (sigc::mem_fun (*this, &ProcessorBox::route_processors_changed)));
+ connections.add_connection (_route->GoingAway.connect (sigc::mem_fun (*this, &ProcessorBox::route_going_away)));
+ connections.add_connection (_route->NameChanged.connect (sigc::mem_fun(*this, &ProcessorBox::route_name_changed)));
redisplay_processors ();
}
@@ -437,7 +436,7 @@ ProcessorBox::build_send_action_menu ()
Gtk::Menu*
ProcessorBox::build_possible_aux_menu ()
{
- boost::shared_ptr<RouteList> rl = _session.get_routes_with_internal_returns();
+ boost::shared_ptr<RouteList> rl = _session->get_routes_with_internal_returns();
if (rl->empty()) {
return 0;
@@ -630,7 +629,7 @@ ProcessorBox::processor_button_press_event (GdkEventButton *ev, ProcessorEntry*
if (processor && (Keyboard::is_edit_event (ev) || (ev->button == 1 && ev->type == GDK_2BUTTON_PRESS))) {
- if (_session.engine().connected()) {
+ if (_session->engine().connected()) {
/* XXX giving an error message here is hard, because we may be in the midst of a button press */
edit_processor (processor);
}
@@ -747,7 +746,7 @@ ProcessorBox::use_plugins (const SelectedPlugins& plugins)
{
for (SelectedPlugins::const_iterator p = plugins.begin(); p != plugins.end(); ++p) {
- boost::shared_ptr<Processor> processor (new PluginInsert (_session, *p));
+ boost::shared_ptr<Processor> processor (new PluginInsert (*_session, *p));
Route::ProcessorStreams err_streams;
@@ -812,18 +811,18 @@ ProcessorBox::weird_plugin_dialog (Plugin& p, Route::ProcessorStreams streams)
void
ProcessorBox::choose_insert ()
{
- boost::shared_ptr<Processor> processor (new PortInsert (_session, _route->mute_master()));
+ boost::shared_ptr<Processor> processor (new PortInsert (*_session, _route->mute_master()));
_route->add_processor (processor, _placement);
}
void
ProcessorBox::choose_send ()
{
- boost::shared_ptr<Send> send (new Send (_session, _route->mute_master()));
+ boost::shared_ptr<Send> send (new Send (*_session, _route->mute_master()));
/* make an educated guess at the initial number of outputs for the send */
- ChanCount outs = (_session.master_out())
- ? _session.master_out()->n_outputs()
+ ChanCount outs = (_session->master_out())
+ ? _session->master_out()->n_outputs()
: _route->n_outputs();
/* XXX need processor lock on route */
@@ -841,7 +840,7 @@ ProcessorBox::choose_send ()
is closed.
*/
- IOSelectorWindow *ios = new IOSelectorWindow (&_session, send->output(), true);
+ IOSelectorWindow *ios = new IOSelectorWindow (_session, send->output(), true);
ios->show_all ();
/* keep a reference to the send so it doesn't get deleted while
@@ -927,7 +926,7 @@ ProcessorBox::choose_aux (boost::weak_ptr<Route> wr)
boost::shared_ptr<RouteList> rlist (new RouteList);
rlist->push_back (_route);
- _session.add_internal_sends (target, PreFader, rlist);
+ _session->add_internal_sends (target, PreFader, rlist);
}
void
@@ -1219,7 +1218,7 @@ ProcessorBox::rename_processor (boost::shared_ptr<Processor> processor)
case Gtk::RESPONSE_ACCEPT:
name_prompter.get_result (result);
if (result.length()) {
- if (_session.route_by_name (result)) {
+ if (_session->route_by_name (result)) {
ARDOUR_UI::instance()->popup_error (_("A track already exists with that name."));
return;
}
@@ -1279,20 +1278,20 @@ ProcessorBox::paste_processor_state (const XMLNodeList& nlist, boost::shared_ptr
} else if (type->value() == "send") {
XMLNode n (**niter);
- Send::make_unique (n, _session);
- p.reset (new Send (_session, _route->mute_master(), n));
+ Send::make_unique (n, *_session);
+ p.reset (new Send (*_session, _route->mute_master(), n));
} else if (type->value() == "return") {
XMLNode n (**niter);
- Return::make_unique (n, _session);
- p.reset (new Return (_session, **niter));
+ Return::make_unique (n, *_session);
+ p.reset (new Return (*_session, **niter));
} else {
/* XXX its a bit limiting to assume that everything else
is a plugin.
*/
- p.reset (new PluginInsert (_session, **niter));
+ p.reset (new PluginInsert (*_session, **niter));
}
copies.push_back (p);
@@ -1424,7 +1423,7 @@ ProcessorBox::edit_processor (boost::shared_ptr<Processor> processor)
if ((send = boost::dynamic_pointer_cast<Send> (processor)) != 0) {
- if (!_session.engine().connected()) {
+ if (!_session->engine().connected()) {
return;
}
@@ -1449,7 +1448,7 @@ ProcessorBox::edit_processor (boost::shared_ptr<Processor> processor)
} else if ((retrn = boost::dynamic_pointer_cast<Return> (processor)) != 0) {
- if (!_session.engine().connected()) {
+ if (!_session->engine().connected()) {
return;
}
@@ -1493,7 +1492,7 @@ ProcessorBox::edit_processor (boost::shared_ptr<Processor> processor)
} else if ((port_insert = boost::dynamic_pointer_cast<PortInsert> (processor)) != 0) {
- if (!_session.engine().connected()) {
+ if (!_session->engine().connected()) {
MessageDialog msg ( _("Not connected to JACK - no I/O changes are possible"));
msg.run ();
return;
@@ -1502,7 +1501,7 @@ ProcessorBox::edit_processor (boost::shared_ptr<Processor> processor)
PortInsertWindow *io_selector;
if (port_insert->get_gui() == 0) {
- io_selector = new PortInsertWindow (&_session, port_insert);
+ io_selector = new PortInsertWindow (_session, port_insert);
port_insert->set_gui (io_selector);
} else {
diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h
index daff50dfe7..e704eba015 100644
--- a/gtk2_ardour/processor_box.h
+++ b/gtk2_ardour/processor_box.h
@@ -20,9 +20,11 @@
#ifndef __ardour_gtk_processor_box__
#define __ardour_gtk_processor_box__
+#include <cmath>
#include <vector>
-#include <cmath>
+#include <boost/function.hpp>
+
#include <gtkmm/box.h>
#include <gtkmm/eventbox.h>
#include <gtkmm/menu.h>
@@ -34,6 +36,7 @@
#include <gtkmm2ext/pixfader.h>
#include "pbd/stateful.h"
+#include "pbd/scoped_connections.h"
#include "ardour/types.h"
#include "ardour/ardour.h"
@@ -41,6 +44,7 @@
#include "ardour/port_insert.h"
#include "ardour/processor.h"
#include "ardour/route.h"
+#include "ardour/session_handle.h"
#include "pbd/fastlog.h"
@@ -120,11 +124,11 @@ private:
static Glib::RefPtr<Gdk::Pixbuf> _slider;
};
-class ProcessorBox : public Gtk::HBox, public PluginInterestedObject
+class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARDOUR::SessionHandlePtr
{
public:
- ProcessorBox (ARDOUR::Session&, sigc::slot<PluginSelector*> get_plugin_selector,
- RouteRedirectSelection&, MixerStrip* parent, bool owner_is_mixer = false);
+ ProcessorBox (ARDOUR::Session*, boost::function<PluginSelector*()> get_plugin_selector,
+ RouteRedirectSelection&, MixerStrip* parent, bool owner_is_mixer = false);
~ProcessorBox ();
void set_route (boost::shared_ptr<ARDOUR::Route>);
@@ -145,13 +149,12 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject
private:
boost::shared_ptr<ARDOUR::Route> _route;
- ARDOUR::Session & _session;
MixerStrip* _parent_strip; // null if in RouteParamsUI
bool _owner_is_mixer;
bool ab_direction;
- std::vector<sigc::connection> connections;
+ PBD::ScopedConnectionList connections;
- sigc::slot<PluginSelector*> _get_plugin_selector;
+ boost::function<PluginSelector*()> _get_plugin_selector;
boost::shared_ptr<ARDOUR::Processor> _processor_being_created;
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index 8b4684f539..1677c2ee49 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -83,7 +83,7 @@ class MarkerView;
* of PublicEditor need not be recompiled if private methods or member variables
* change.
*/
-class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway {
+class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible {
public:
PublicEditor ();
virtual ~PublicEditor ();
@@ -97,10 +97,10 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway
/** Attach this editor to a Session.
* @param s Session to connect to.
*/
- virtual void connect_to_session (ARDOUR::Session* s) = 0;
+ virtual void set_session (ARDOUR::Session* s) = 0;
/** @return The Session that we are editing, or 0 */
- virtual ARDOUR::Session* current_session () const = 0;
+ virtual ARDOUR::Session* session () const = 0;
/** Set the snap type.
* @param t Snap type (defined in editing_syms.h)
diff --git a/gtk2_ardour/region_editor.h b/gtk2_ardour/region_editor.h
index 596bd44140..f66d7f8f81 100644
--- a/gtk2_ardour/region_editor.h
+++ b/gtk2_ardour/region_editor.h
@@ -20,6 +20,8 @@
#ifndef __gtk_ardour_region_edit_h__
#define __gtk_ardour_region_edit_h__
+#include "ardour/session_handle.h"
+
#include "ardour_dialog.h"
namespace ARDOUR { class Session; }
@@ -28,15 +30,12 @@ namespace ARDOUR { class Session; }
class RegionEditor : public ArdourDialog
{
public:
- RegionEditor(ARDOUR::Session& s)
- : ArdourDialog ("region editor")
- , _session(s)
- {}
+ RegionEditor(ARDOUR::Session* s)
+ : ArdourDialog ("region editor") {
+ set_session (s);
+ }
virtual ~RegionEditor () {}
-
- protected:
- ARDOUR::Session& _session;
};
#endif /* __gtk_ardour_region_edit_h__ */
diff --git a/gtk2_ardour/region_gain_line.cc b/gtk2_ardour/region_gain_line.cc
index b3dea4f42a..00352c96df 100644
--- a/gtk2_ardour/region_gain_line.cc
+++ b/gtk2_ardour/region_gain_line.cc
@@ -18,9 +18,11 @@
*/
#include "evoral/Curve.hpp"
-#include "ardour/audioregion.h"
#include "pbd/memento_command.h"
+#include "ardour/audioregion.h"
+#include "ardour/session.h"
+
#include "region_gain_line.h"
#include "audio_region_view.h"
#include "utils.h"
@@ -28,17 +30,14 @@
#include "time_axis_view.h"
#include "editor.h"
-#include "ardour/session.h"
-
#include "i18n.h"
using namespace std;
using namespace ARDOUR;
using namespace PBD;
-AudioRegionGainLine::AudioRegionGainLine (const string & name, Session& s, AudioRegionView& r, ArdourCanvas::Group& parent, boost::shared_ptr<AutomationList> l)
+AudioRegionGainLine::AudioRegionGainLine (const string & name, AudioRegionView& r, ArdourCanvas::Group& parent, boost::shared_ptr<AutomationList> l)
: AutomationLine (name, r.get_time_axis_view(), parent, l)
- , session (s)
, rv (r)
{
// If this isn't true something is horribly wrong, and we'll get catastrophic gain values
@@ -55,7 +54,7 @@ AudioRegionGainLine::start_drag (ControlPoint* cp, nframes_t x, float fraction)
{
AutomationLine::start_drag (cp, x, fraction);
if (!rv.audio_region()->envelope_active()) {
- trackview.session().add_command(new MementoCommand<AudioRegion>(*(rv.audio_region().get()), &rv.audio_region()->get_state(), 0));
+ trackview.session()->add_command(new MementoCommand<AudioRegion>(*(rv.audio_region().get()), &rv.audio_region()->get_state(), 0));
rv.audio_region()->set_envelope_active(false);
}
}
@@ -68,21 +67,21 @@ AudioRegionGainLine::remove_point (ControlPoint& cp)
model_representation (cp, mr);
- trackview.editor().current_session()->begin_reversible_command (_("remove control point"));
+ trackview.editor().session()->begin_reversible_command (_("remove control point"));
XMLNode &before = alist->get_state();
if (!rv.audio_region()->envelope_active()) {
XMLNode &region_before = rv.audio_region()->get_state();
rv.audio_region()->set_envelope_active(true);
XMLNode &region_after = rv.audio_region()->get_state();
- trackview.session().add_command(new MementoCommand<AudioRegion>(*(rv.audio_region().get()), &region_before, &region_after));
+ trackview.session()->add_command(new MementoCommand<AudioRegion>(*(rv.audio_region().get()), &region_before, &region_after));
}
alist->erase (mr.start, mr.end);
- trackview.editor().current_session()->add_command (new MementoCommand<AutomationList>(*alist.get(), &before, &alist->get_state()));
- trackview.editor().current_session()->commit_reversible_command ();
- trackview.editor().current_session()->set_dirty ();
+ trackview.editor().session()->add_command (new MementoCommand<AutomationList>(*alist.get(), &before, &alist->get_state()));
+ trackview.editor().session()->commit_reversible_command ();
+ trackview.editor().session()->set_dirty ();
}
void
@@ -90,7 +89,7 @@ AudioRegionGainLine::end_drag (ControlPoint* cp)
{
if (!rv.audio_region()->envelope_active()) {
rv.audio_region()->set_envelope_active(true);
- trackview.session().add_command(new MementoCommand<AudioRegion>(*(rv.audio_region().get()), 0, &rv.audio_region()->get_state()));
+ trackview.session()->add_command(new MementoCommand<AudioRegion>(*(rv.audio_region().get()), 0, &rv.audio_region()->get_state()));
}
AutomationLine::end_drag(cp);
diff --git a/gtk2_ardour/region_gain_line.h b/gtk2_ardour/region_gain_line.h
index 7033c65604..d54c962294 100644
--- a/gtk2_ardour/region_gain_line.h
+++ b/gtk2_ardour/region_gain_line.h
@@ -21,6 +21,7 @@
#define __ardour_gtk_region_gain_line_h__
#include "ardour/ardour.h"
+
#include <libgnomecanvasmm.h>
#include "automation_line.h"
@@ -35,7 +36,7 @@ class AudioRegionView;
class AudioRegionGainLine : public AutomationLine
{
public:
- AudioRegionGainLine (const std::string & name, ARDOUR::Session&, AudioRegionView&, ArdourCanvas::Group& parent, boost::shared_ptr<ARDOUR::AutomationList>);
+ AudioRegionGainLine (const std::string & name, AudioRegionView&, ArdourCanvas::Group& parent, boost::shared_ptr<ARDOUR::AutomationList>);
void start_drag (ControlPoint*, nframes_t x, float fraction);
void end_drag (ControlPoint*);
@@ -43,7 +44,6 @@ class AudioRegionGainLine : public AutomationLine
void remove_point (ControlPoint&);
private:
- ARDOUR::Session& session;
AudioRegionView& rv;
};
diff --git a/gtk2_ardour/region_selection.cc b/gtk2_ardour/region_selection.cc
index 94592000a1..30f6dfb565 100644
--- a/gtk2_ardour/region_selection.cc
+++ b/gtk2_ardour/region_selection.cc
@@ -32,7 +32,7 @@ using namespace PBD;
*/
RegionSelection::RegionSelection ()
{
- RegionView::RegionViewGoingAway.connect (sigc::mem_fun(*this, &RegionSelection::remove_it));
+ death_connection = RegionView::RegionViewGoingAway.connect (boost::bind (&RegionSelection::remove_it, this, _1));
_current_start = 0;
_current_end = 0;
@@ -43,9 +43,8 @@ RegionSelection::RegionSelection ()
*/
RegionSelection::RegionSelection (const RegionSelection& other)
: std::list<RegionView*>()
- , sigc::trackable(other)
{
- RegionView::RegionViewGoingAway.connect (sigc::mem_fun(*this, &RegionSelection::remove_it));
+ death_connection = RegionView::RegionViewGoingAway.connect (boost::bind (&RegionSelection::remove_it, this, _1));
_current_start = other._current_start;
_current_end = other._current_end;
diff --git a/gtk2_ardour/region_selection.h b/gtk2_ardour/region_selection.h
index f89eef9eb8..dcb6d68e0c 100644
--- a/gtk2_ardour/region_selection.h
+++ b/gtk2_ardour/region_selection.h
@@ -21,7 +21,9 @@
#include <set>
#include <list>
-#include <sigc++/signal.h>
+
+#include <boost/signals2.hpp>
+
#include "ardour/types.h"
class RegionView;
@@ -29,7 +31,7 @@ class TimeAxisView;
/** Class to represent list of selected regions.
*/
-class RegionSelection : public std::list<RegionView*>, public sigc::trackable
+class RegionSelection : public std::list<RegionView*>
{
public:
RegionSelection();
@@ -69,6 +71,7 @@ class RegionSelection : public std::list<RegionView*>, public sigc::trackable
nframes_t _current_end; ///< end position for the selection
std::list<RegionView *> _bylayer; ///< list of regions sorted by layer
+ boost::signals2::scoped_connection death_connection;
};
#endif /* __ardour_gtk_region_selection_h__ */
diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc
index 343c2b47ff..5cc4df5669 100644
--- a/gtk2_ardour/region_view.cc
+++ b/gtk2_ardour/region_view.cc
@@ -58,7 +58,7 @@ using namespace ArdourCanvas;
static const int32_t sync_mark_width = 9;
-sigc::signal<void,RegionView*> RegionView::RegionViewGoingAway;
+boost::signals2::signal<void(RegionView*)> RegionView::RegionViewGoingAway;
RegionView::RegionView (ArdourCanvas::Group* parent,
TimeAxisView& tv,
diff --git a/gtk2_ardour/region_view.h b/gtk2_ardour/region_view.h
index 288969616f..ad534c04bf 100644
--- a/gtk2_ardour/region_view.h
+++ b/gtk2_ardour/region_view.h
@@ -89,7 +89,7 @@ class RegionView : public TimeAxisViewItem
void enable_display(bool yn) { _enable_display = yn; }
virtual void update_coverage_frames (LayerDisplay);
- static sigc::signal<void,RegionView*> RegionViewGoingAway;
+ static boost::signals2::signal<void(RegionView*)> RegionViewGoingAway;
protected:
@@ -139,7 +139,7 @@ class RegionView : public TimeAxisViewItem
bool in_destructor;
bool wait_for_data;
- sigc::connection data_ready_connection;
+ boost::signals2::scoped_connection data_ready_connection;
std::vector<GhostRegion*> ghosts;
diff --git a/gtk2_ardour/return_ui.cc b/gtk2_ardour/return_ui.cc
index c4a4472553..8a12a3ece9 100644
--- a/gtk2_ardour/return_ui.cc
+++ b/gtk2_ardour/return_ui.cc
@@ -34,10 +34,9 @@ using namespace std;
using namespace ARDOUR;
using namespace PBD;
-ReturnUI::ReturnUI (Gtk::Window* parent, boost::shared_ptr<Return> r, Session& se)
- : _return (r)
- , _session (se)
- , _gpm (se, 250)
+ReturnUI::ReturnUI (Gtk::Window* parent, boost::shared_ptr<Return> r, Session* session)
+ :_return (r)
+ , _gpm (session, 250)
{
_gpm.set_controls (boost::shared_ptr<Route>(), r->meter(), r->amp());
@@ -49,7 +48,7 @@ ReturnUI::ReturnUI (Gtk::Window* parent, boost::shared_ptr<Return> r, Session& s
_vbox.pack_start (_hbox, false, false, false);
- io = manage (new IOSelector (parent, &se, r->output()));
+ io = manage (new IOSelector (parent, session, r->output()));
pack_start (_vbox, false, false);
@@ -99,10 +98,10 @@ ReturnUI::fast_update ()
}
}
-ReturnUIWindow::ReturnUIWindow (boost::shared_ptr<Return> s, Session& ss)
- : ArdourDialog (string("Ardour: return ") + s->name())
+ReturnUIWindow::ReturnUIWindow (boost::shared_ptr<Return> r, ARDOUR::Session* s)
+ : ArdourDialog (string("Ardour: return ") + r->name())
{
- ui = new ReturnUI (this, s, ss);
+ ui = new ReturnUI (this, r, s);
hpacker.pack_start (*ui, true, true);
@@ -111,7 +110,7 @@ ReturnUIWindow::ReturnUIWindow (boost::shared_ptr<Return> s, Session& ss)
set_name ("ReturnUIWindow");
- going_away_connection = s->GoingAway.connect (sigc::mem_fun (*this, &ReturnUIWindow::return_going_away));
+ going_away_connection = r->GoingAway.connect (sigc::mem_fun (*this, &ReturnUIWindow::return_going_away));
signal_delete_event().connect (sigc::bind (sigc::ptr_fun (just_hide_it), reinterpret_cast<Window *> (this)));
}
@@ -124,7 +123,7 @@ void
ReturnUIWindow::return_going_away ()
{
ENSURE_GUI_THREAD (*this, &ReturnUIWindow::return_going_away)
+ going_away_connection.disconnect ();
delete_when_idle (this);
- going_away_connection.disconnect ();
}
diff --git a/gtk2_ardour/return_ui.h b/gtk2_ardour/return_ui.h
index 3a5e3c8f3f..ff1f2f35e5 100644
--- a/gtk2_ardour/return_ui.h
+++ b/gtk2_ardour/return_ui.h
@@ -26,16 +26,15 @@
namespace ARDOUR {
class Return;
- class Session;
class IOProcessor;
}
class IOSelector;
-class ReturnUI : public Gtk::HBox
+class ReturnUI : public Gtk::HBox
{
public:
- ReturnUI (Gtk::Window *,boost::shared_ptr<ARDOUR::Return>, ARDOUR::Session&);
+ ReturnUI (Gtk::Window *,boost::shared_ptr<ARDOUR::Return>, ARDOUR::Session*);
~ReturnUI();
void update ();
@@ -47,7 +46,6 @@ class ReturnUI : public Gtk::HBox
private:
boost::shared_ptr<ARDOUR::Return> _return;
- ARDOUR::Session& _session;
GainMeter _gpm;
Gtk::VBox _vbox;
Gtk::VBox _hbox;
@@ -61,7 +59,7 @@ class ReturnUI : public Gtk::HBox
class ReturnUIWindow : public ArdourDialog
{
public:
- ReturnUIWindow(boost::shared_ptr<ARDOUR::Return>, ARDOUR::Session&);
+ ReturnUIWindow(boost::shared_ptr<ARDOUR::Return>, ARDOUR::Session*);
~ReturnUIWindow();
ReturnUI* ui;
@@ -70,7 +68,7 @@ class ReturnUIWindow : public ArdourDialog
Gtk::HBox hpacker;
void return_going_away ();
- sigc::connection going_away_connection;
+ boost::signals2::scoped_connection going_away_connection;
};
#endif /* __ardour_gtk_return_ui_h__ */
diff --git a/gtk2_ardour/rhythm_ferret.cc b/gtk2_ardour/rhythm_ferret.cc
index 1f38bb8992..f6619fcb8b 100644
--- a/gtk2_ardour/rhythm_ferret.cc
+++ b/gtk2_ardour/rhythm_ferret.cc
@@ -230,7 +230,7 @@ RhythmFerret::get_action () const
void
RhythmFerret::run_analysis ()
{
- if (!session) {
+ if (!_session) {
return;
}
@@ -268,7 +268,7 @@ RhythmFerret::run_analysis ()
int
RhythmFerret::run_percussion_onset_analysis (boost::shared_ptr<Readable> readable, nframes64_t offset, AnalysisFeatureList& results)
{
- TransientDetector t (session->frame_rate());
+ TransientDetector t (_session->frame_rate());
for (uint32_t i = 0; i < readable->n_channels(); ++i) {
@@ -295,7 +295,7 @@ RhythmFerret::run_percussion_onset_analysis (boost::shared_ptr<Readable> readabl
}
if (!results.empty()) {
- TransientDetector::cleanup_transients (results, session->frame_rate(), trigger_gap_adjustment.get_value());
+ TransientDetector::cleanup_transients (results, _session->frame_rate(), trigger_gap_adjustment.get_value());
}
return 0;
@@ -322,7 +322,7 @@ int
RhythmFerret::run_note_onset_analysis (boost::shared_ptr<Readable> readable, nframes64_t offset, AnalysisFeatureList& results)
{
try {
- OnsetDetector t (session->frame_rate());
+ OnsetDetector t (_session->frame_rate());
for (uint32_t i = 0; i < readable->n_channels(); ++i) {
@@ -356,7 +356,7 @@ RhythmFerret::run_note_onset_analysis (boost::shared_ptr<Readable> readable, nfr
}
if (!results.empty()) {
- OnsetDetector::cleanup_onsets (results, session->frame_rate(), trigger_gap_adjustment.get_value());
+ OnsetDetector::cleanup_onsets (results, _session->frame_rate(), trigger_gap_adjustment.get_value());
}
return 0;
@@ -365,7 +365,7 @@ RhythmFerret::run_note_onset_analysis (boost::shared_ptr<Readable> readable, nfr
void
RhythmFerret::do_action ()
{
- if (!session || current_results.empty()) {
+ if (!_session || current_results.empty()) {
return;
}
@@ -390,7 +390,7 @@ RhythmFerret::do_split_action ()
return;
}
- session->begin_reversible_command (_("split regions (rhythm ferret)"));
+ _session->begin_reversible_command (_("split regions (rhythm ferret)"));
for (RegionSelection::iterator i = regions.begin(); i != regions.end(); ) {
@@ -408,7 +408,7 @@ RhythmFerret::do_split_action ()
i = tmp;
}
- session->commit_reversible_command ();
+ _session->commit_reversible_command ();
}
void
diff --git a/gtk2_ardour/route_group_menu.cc b/gtk2_ardour/route_group_menu.cc
index 08d2312415..7e05c26fe3 100644
--- a/gtk2_ardour/route_group_menu.cc
+++ b/gtk2_ardour/route_group_menu.cc
@@ -28,9 +28,9 @@
using namespace Gtk;
using namespace ARDOUR;
-RouteGroupMenu::RouteGroupMenu (Session& s, RouteGroup::Property p)
- : _session (s),
- _default_properties (p)
+RouteGroupMenu::RouteGroupMenu (Session* s, RouteGroup::Property p)
+ : SessionHandlePtr (s)
+ , _default_properties (p)
{
rebuild (0);
}
@@ -52,7 +52,9 @@ RouteGroupMenu::rebuild (RouteGroup* curr)
static_cast<RadioMenuItem*> (&items().back())->set_active ();
}
- _session.foreach_route_group (sigc::bind (sigc::mem_fun (*this, &RouteGroupMenu::add_item), curr, &group));
+ if (_session) {
+ _session->foreach_route_group (sigc::bind (sigc::mem_fun (*this, &RouteGroupMenu::add_item), curr, &group));
+ }
}
void
@@ -76,13 +78,17 @@ RouteGroupMenu::set_group (RouteGroup* g)
void
RouteGroupMenu::new_group ()
{
- RouteGroup* g = new RouteGroup (_session, "", RouteGroup::Active, _default_properties);
+ if (!_session) {
+ return;
+ }
+
+ RouteGroup* g = new RouteGroup (*_session, "", RouteGroup::Active, _default_properties);
RouteGroupDialog d (g, Gtk::Stock::NEW);
int const r = d.do_run ();
if (r == Gtk::RESPONSE_OK) {
- _session.add_route_group (g);
+ _session->add_route_group (g);
set_group (g);
} else {
delete g;
diff --git a/gtk2_ardour/route_group_menu.h b/gtk2_ardour/route_group_menu.h
index ba955f64a2..7b9e539ecb 100644
--- a/gtk2_ardour/route_group_menu.h
+++ b/gtk2_ardour/route_group_menu.h
@@ -17,26 +17,28 @@
*/
+#ifndef __ardour_gtk_route_group_menu_h__
+#define __ardour_gtk_route_group_menu_h__
+
#include "ardour/route_group.h"
+#include "ardour/session_handle.h"
-namespace ARDOUR {
- class Session;
-}
-class RouteGroupMenu : public Gtk::Menu
+class RouteGroupMenu : public Gtk::Menu, public ARDOUR::SessionHandlePtr
{
public:
- RouteGroupMenu (ARDOUR::Session &, ARDOUR::RouteGroup::Property);
+ RouteGroupMenu (ARDOUR::Session*, ARDOUR::RouteGroup::Property);
void rebuild (ARDOUR::RouteGroup *);
sigc::signal<void, ARDOUR::RouteGroup*> GroupSelected;
-private:
+ private:
void add_item (ARDOUR::RouteGroup *, ARDOUR::RouteGroup *, Gtk::RadioMenuItem::Group*);
void new_group ();
void set_group (ARDOUR::RouteGroup *);
- ARDOUR::Session& _session;
ARDOUR::RouteGroup::Property _default_properties;
};
+
+#endif /* __ardour_gtk_route_group_menu_h__ */
diff --git a/gtk2_ardour/route_params_ui.cc b/gtk2_ardour/route_params_ui.cc
index c9bba4b63b..c948d388d8 100644
--- a/gtk2_ardour/route_params_ui.cc
+++ b/gtk2_ardour/route_params_ui.cc
@@ -181,16 +181,22 @@ RouteParams_UI::add_routes (RouteList& routes)
//route_select_list.rows().back().select ();
- route->NameChanged.connect (sigc::bind (sigc::mem_fun(*this, &RouteParams_UI::route_name_changed), route));
- route->GoingAway.connect (sigc::bind (sigc::mem_fun(*this, &RouteParams_UI::route_removed), route));
+ scoped_connect (route->NameChanged, boost::bind (&RouteParams_UI::route_name_changed, this, boost::weak_ptr<Route>(route)));
+ scoped_connect (route->GoingAway, boost::bind (&RouteParams_UI::route_removed, this, boost::weak_ptr<Route>(route)));
}
}
void
-RouteParams_UI::route_name_changed (boost::shared_ptr<Route> route)
+RouteParams_UI::route_name_changed (boost::weak_ptr<Route> wr)
{
- ENSURE_GUI_THREAD (*this, &RouteParams_UI::route_name_changed, route)
+ boost::shared_ptr<Route> route (wr.lock());
+
+ if (!route) {
+ return;
+ }
+
+ ENSURE_GUI_THREAD (*this, &RouteParams_UI::route_name_changed, wr)
bool found = false ;
TreeModel::Children rows = route_display_model->children();
@@ -216,14 +222,13 @@ RouteParams_UI::route_name_changed (boost::shared_ptr<Route> route)
void
RouteParams_UI::setup_processor_boxes()
{
- if (session && _route) {
+ if (_session && _route) {
// just in case... shouldn't need this
cleanup_processor_boxes();
// construct new redirect boxes
- insert_box = new ProcessorBox(*session,
- sigc::mem_fun(*this, &RouteParams_UI::plugin_selector), _rr_selection, 0);
+ insert_box = new ProcessorBox (_session, boost::bind (&RouteParams_UI::plugin_selector, this), _rr_selection, 0);
insert_box->set_route (_route);
redir_hpane.pack1 (*insert_box);
@@ -265,18 +270,19 @@ RouteParams_UI::cleanup_latency_frame ()
latency_packer.remove (*latency_widget);
latency_packer.remove (latency_button_box);
latency_packer.remove (delay_label);
+ latency_connections.drop_connections ();
+ latency_click_connection.disconnect ();
+
delete latency_widget;
latency_widget = 0;
- latency_conn.disconnect ();
- delay_conn.disconnect ();
- latency_apply_conn.disconnect ();
+
}
}
void
RouteParams_UI::setup_latency_frame ()
{
- latency_widget = new LatencyGUI (*(_route->output()), session->frame_rate(), session->engine().frames_per_cycle());
+ latency_widget = new LatencyGUI (*(_route->output()), _session->frame_rate(), _session->engine().frames_per_cycle());
char buf[128];
snprintf (buf, sizeof (buf), _("Playback delay: %u samples"), _route->initial_delay());
@@ -286,9 +292,9 @@ RouteParams_UI::setup_latency_frame ()
latency_packer.pack_start (latency_button_box, false, false);
latency_packer.pack_start (delay_label);
- latency_apply_conn = latency_apply_button.signal_clicked().connect (sigc::mem_fun (*latency_widget, &LatencyGUI::finish));
- latency_conn = _route->signal_latency_changed.connect (sigc::mem_fun (*this, &RouteParams_UI::refresh_latency));
- delay_conn = _route->initial_delay_changed.connect (sigc::mem_fun (*this, &RouteParams_UI::refresh_latency));
+ latency_click_connection = latency_apply_button.signal_clicked().connect (sigc::mem_fun (*latency_widget, &LatencyGUI::finish));
+ latency_connections.add_connection (_route->signal_latency_changed.connect (sigc::mem_fun (*this, &RouteParams_UI::refresh_latency)));
+ latency_connections.add_connection ( _route->initial_delay_changed.connect (sigc::mem_fun (*this, &RouteParams_UI::refresh_latency)));
latency_frame.add (latency_packer);
latency_frame.show_all ();
@@ -300,13 +306,13 @@ RouteParams_UI::setup_io_frames()
cleanup_io_frames();
// input
- _input_iosel = new IOSelector (this, session, _route->input());
+ _input_iosel = new IOSelector (this, _session, _route->input());
_input_iosel->setup ();
input_frame.add (*_input_iosel);
input_frame.show_all();
// output
- _output_iosel = new IOSelector (this, session, _route->output());
+ _output_iosel = new IOSelector (this, _session, _route->output());
_output_iosel->setup ();
output_frame.add (*_output_iosel);
output_frame.show_all();
@@ -341,7 +347,7 @@ RouteParams_UI::cleanup_view (bool stopupdate)
plugui->stop_updating (0);
}
- _plugin_conn.disconnect();
+ _processor_going_away_connection.disconnect ();
redir_hpane.remove(*_active_view);
delete _active_view;
_active_view = 0;
@@ -349,9 +355,15 @@ RouteParams_UI::cleanup_view (bool stopupdate)
}
void
-RouteParams_UI::route_removed (boost::shared_ptr<Route> route)
+RouteParams_UI::route_removed (boost::weak_ptr<Route> wr)
{
- ENSURE_GUI_THREAD (*this, &RouteParams_UI::route_removed, route)
+ boost::shared_ptr<Route> route (wr.lock());
+
+ if (!route) {
+ return;
+ }
+
+ ENSURE_GUI_THREAD (*this, &RouteParams_UI::route_removed, wr)
TreeModel::Children rows = route_display_model->children();
TreeModel::Children::iterator ri;
@@ -380,29 +392,27 @@ void
RouteParams_UI::set_session (Session *sess)
{
ArdourDialog::set_session (sess);
-
+
route_display_model->clear();
+ _plugin_selector->set_session (_session);
- if (session) {
- boost::shared_ptr<RouteList> r = session->get_routes();
+ if (_session) {
+ boost::shared_ptr<RouteList> r = _session->get_routes();
add_routes (*r);
- session->GoingAway.connect (sigc::mem_fun(*this, &ArdourDialog::session_gone));
- session->RouteAdded.connect (sigc::mem_fun(*this, &RouteParams_UI::add_routes));
+ _session_connections.add_connection (_session->RouteAdded.connect (sigc::mem_fun(*this, &RouteParams_UI::add_routes)));
start_updating ();
} else {
stop_updating ();
}
-
- //route_select_list.thaw ();
-
- _plugin_selector->set_session (session);
}
void
-RouteParams_UI::session_gone ()
+RouteParams_UI::session_going_away ()
{
- ENSURE_GUI_THREAD (*this, &RouteParams_UI::session_gone)
+ ENSURE_GUI_THREAD (*this, &RouteParams_UI::session_going_away);
+
+ SessionHandlePtr::session_going_away ();
route_display_model->clear();
@@ -414,9 +424,6 @@ RouteParams_UI::session_gone ()
_route.reset ((Route*) 0);
_processor.reset ((Processor*) 0);
update_title();
-
- ArdourDialog::session_gone();
-
}
void
@@ -436,8 +443,7 @@ RouteParams_UI::route_selected()
// remove event binding from previously selected
if (_route) {
- _route_conn.disconnect();
- _route_ds_conn.disconnect();
+ _route_processors_connection.disconnect ();
cleanup_processor_boxes();
cleanup_view();
cleanup_io_frames();
@@ -452,9 +458,8 @@ RouteParams_UI::route_selected()
setup_processor_boxes();
setup_latency_frame ();
- // sigc::bind to redirects changed event for this route
- _route_conn = route->processors_changed.connect (sigc::mem_fun(*this, &RouteParams_UI::processors_changed));
-
+ _route_processors_connection = route->processors_changed.connect (boost::bind (&RouteParams_UI::processors_changed, this, _1));
+
track_input_label.set_text (_route->name());
update_title();
@@ -462,7 +467,7 @@ RouteParams_UI::route_selected()
} else {
// no selection
if (_route) {
- _route_conn.disconnect();
+ _route_processors_connection.disconnect ();
// remove from view
cleanup_io_frames();
@@ -505,64 +510,62 @@ RouteParams_UI::show_track_menu()
}
void
-RouteParams_UI::redirect_selected (boost::shared_ptr<ARDOUR::Processor> insert)
+RouteParams_UI::redirect_selected (boost::shared_ptr<ARDOUR::Processor> proc)
{
boost::shared_ptr<Send> send;
boost::shared_ptr<Return> retrn;
boost::shared_ptr<PluginInsert> plugin_insert;
boost::shared_ptr<PortInsert> port_insert;
- if ((send = boost::dynamic_pointer_cast<Send> (insert)) != 0) {
+ if ((send = boost::dynamic_pointer_cast<Send> (proc)) != 0) {
- SendUI *send_ui = new SendUI (this, send, *session);
+ SendUI *send_ui = new SendUI (this, send, _session);
cleanup_view();
- _plugin_conn = send->GoingAway.connect (sigc::bind (sigc::mem_fun(*this, &RouteParams_UI::redirect_going_away),
- insert));
+ _processor_going_away_connection = send->GoingAway.connect (boost::bind (&RouteParams_UI::processor_going_away, this,
+ boost::weak_ptr<Processor>(proc)));
+
_active_view = send_ui;
redir_hpane.add2 (*_active_view);
redir_hpane.show_all();
- } else if ((retrn = boost::dynamic_pointer_cast<Return> (insert)) != 0) {
+ } else if ((retrn = boost::dynamic_pointer_cast<Return> (proc)) != 0) {
- ReturnUI *return_ui = new ReturnUI (this, retrn, *session);
+ ReturnUI *return_ui = new ReturnUI (this, retrn, _session);
cleanup_view();
- _plugin_conn = retrn->GoingAway.connect (sigc::bind (sigc::mem_fun(*this, &RouteParams_UI::redirect_going_away),
- insert));
+ _processor_going_away_connection = retrn->GoingAway.connect (boost::bind (&RouteParams_UI::processor_going_away, this,
+ boost::weak_ptr<Processor>(proc)));
_active_view = return_ui;
redir_hpane.add2 (*_active_view);
redir_hpane.show_all();
- } else if ((plugin_insert = boost::dynamic_pointer_cast<PluginInsert> (insert)) != 0) {
+ } else if ((plugin_insert = boost::dynamic_pointer_cast<PluginInsert> (proc)) != 0) {
GenericPluginUI *plugin_ui = new GenericPluginUI (plugin_insert, true);
cleanup_view();
- _plugin_conn = plugin_insert->plugin()->GoingAway.connect (sigc::bind (sigc::mem_fun(*this, &RouteParams_UI::plugin_going_away),
- PreFader));
+ _processor_going_away_connection = plugin_insert->plugin()->GoingAway.connect (boost::bind (&RouteParams_UI::plugin_going_away, this, PreFader));
plugin_ui->start_updating (0);
_active_view = plugin_ui;
redir_hpane.pack2 (*_active_view);
redir_hpane.show_all();
- } else if ((port_insert = boost::dynamic_pointer_cast<PortInsert> (insert)) != 0) {
+ } else if ((port_insert = boost::dynamic_pointer_cast<PortInsert> (proc)) != 0) {
- PortInsertUI *portinsert_ui = new PortInsertUI (this, session, port_insert);
+ PortInsertUI *portinsert_ui = new PortInsertUI (this, _session, port_insert);
cleanup_view();
- _plugin_conn = port_insert->GoingAway.connect (sigc::bind (sigc::mem_fun(*this, &RouteParams_UI::redirect_going_away),
- insert));
+ _processor_going_away_connection = port_insert->GoingAway.connect (boost::bind (&RouteParams_UI::processor_going_away, this, boost::weak_ptr<Processor> (proc)));
_active_view = portinsert_ui;
redir_hpane.pack2 (*_active_view);
portinsert_ui->redisplay();
redir_hpane.show_all();
}
- _processor = insert;
-
+ _processor = proc;
update_title();
}
@@ -581,14 +584,19 @@ RouteParams_UI::plugin_going_away (Placement place)
}
void
-RouteParams_UI::redirect_going_away (boost::shared_ptr<ARDOUR::Processor> insert)
-
+RouteParams_UI::processor_going_away (boost::weak_ptr<ARDOUR::Processor> wproc)
{
- ENSURE_GUI_THREAD (*this, &RouteParams_UI::redirect_going_away, insert)
+ boost::shared_ptr<Processor> proc = (wproc.lock());
+
+ if (!proc) {
+ return;
+ }
+
+ ENSURE_GUI_THREAD (*this, &RouteParams_UI::processor_going_away, wproc)
printf ("redirect going away\n");
// delete the current view without calling finish
- if (insert == _processor) {
+ if (proc == _processor) {
cleanup_view (false);
_processor.reset ((Processor*) 0);
}
diff --git a/gtk2_ardour/route_params_ui.h b/gtk2_ardour/route_params_ui.h
index 4d21805778..2dcb1b921d 100644
--- a/gtk2_ardour/route_params_ui.h
+++ b/gtk2_ardour/route_params_ui.h
@@ -33,6 +33,7 @@
#include <gtkmm/treeview.h>
#include "pbd/stateful.h"
+#include "pbd/scoped_connections.h"
#include "ardour/ardour.h"
@@ -54,14 +55,14 @@ namespace ARDOUR {
class PluginSelector;
-class RouteParams_UI : public ArdourDialog
+class RouteParams_UI : public ArdourDialog, public PBD::ScopedConnectionList
{
public:
RouteParams_UI ();
~RouteParams_UI();
- void set_session (ARDOUR::Session *);
- void session_gone ();
+ void set_session (ARDOUR::Session*);
+ void session_going_away ();
PluginSelector* plugin_selector() { return _plugin_selector; }
private:
@@ -105,9 +106,9 @@ class RouteParams_UI : public ArdourDialog
Gtk::Button latency_apply_button;
LatencyGUI* latency_widget;
Gtk::Label delay_label;
- sigc::connection latency_conn;
- sigc::connection delay_conn;
- sigc::connection latency_apply_conn;
+
+ PBD::ScopedConnectionList latency_connections;
+ sigc::connection latency_click_connection;
void refresh_latency ();
@@ -125,11 +126,10 @@ class RouteParams_UI : public ArdourDialog
RouteRedirectSelection _rr_selection;
boost::shared_ptr<ARDOUR::Route> _route;
- sigc::connection _route_conn;
- sigc::connection _route_ds_conn;
+ boost::signals2::scoped_connection _route_processors_connection;
boost::shared_ptr<ARDOUR::Processor> _processor;
- sigc::connection _plugin_conn;
+ boost::signals2::scoped_connection _processor_going_away_connection;
enum ConfigView {
@@ -161,8 +161,8 @@ class RouteParams_UI : public ArdourDialog
void add_routes (ARDOUR::RouteList&);
- void route_name_changed (boost::shared_ptr<ARDOUR::Route> route);
- void route_removed (boost::shared_ptr<ARDOUR::Route> route);
+ void route_name_changed (boost::weak_ptr<ARDOUR::Route> route);
+ void route_removed (boost::weak_ptr<ARDOUR::Route> route);
void route_selected();
@@ -182,7 +182,7 @@ class RouteParams_UI : public ArdourDialog
void redirect_selected (boost::shared_ptr<ARDOUR::Processor>);
void plugin_going_away (ARDOUR::Placement);
- void redirect_going_away (boost::shared_ptr<ARDOUR::Processor>);
+ void processor_going_away (boost::weak_ptr<ARDOUR::Processor>);
gint edit_input_configuration (GdkEventButton *ev);
gint edit_output_configuration (GdkEventButton *ev);
diff --git a/gtk2_ardour/route_processor_selection.cc b/gtk2_ardour/route_processor_selection.cc
index 1af1e0c968..102cd724dd 100644
--- a/gtk2_ardour/route_processor_selection.cc
+++ b/gtk2_ardour/route_processor_selection.cc
@@ -26,6 +26,7 @@
#include "ardour/route.h"
#include "route_processor_selection.h"
+#include "gui_thread.h"
#include "i18n.h"
@@ -92,18 +93,28 @@ RouteRedirectSelection::add (boost::shared_ptr<Route> r)
{
if (find (routes.begin(), routes.end(), r) == routes.end()) {
routes.push_back (r);
+ r->GoingAway.connect (boost::bind (&RouteRedirectSelection::removed, this, boost::weak_ptr<Route>(r)));
+ RoutesChanged();
+ }
+}
- // XXX SHAREDPTR FIXME
- // void (RouteRedirectSelection::*pmf)(Route*) = &RouteRedirectSelection::remove;
- // r->GoingAway.connect (sigc::bind (sigc::mem_fun(*this, pmf), r));
+void
+RouteRedirectSelection::removed (boost::weak_ptr<Route> wr)
+{
+ boost::shared_ptr<Route> r (wr.lock());
- RoutesChanged();
+ if (!r) {
+ return;
}
+
+ remove (r);
}
void
RouteRedirectSelection::remove (boost::shared_ptr<Route> r)
{
+ ENSURE_GUI_THREAD (*this, &RouteRedirectSelection::remove, r);
+
list<boost::shared_ptr<Route> >::iterator i;
if ((i = find (routes.begin(), routes.end(), r)) != routes.end()) {
routes.erase (i);
diff --git a/gtk2_ardour/route_processor_selection.h b/gtk2_ardour/route_processor_selection.h
index 83bdbc2d8b..eb76d481dd 100644
--- a/gtk2_ardour/route_processor_selection.h
+++ b/gtk2_ardour/route_processor_selection.h
@@ -21,12 +21,12 @@
#define __ardour_gtk_route_processor_selection_h__
#include <vector>
-#include <sigc++/signal.h>
+#include "pbd/scoped_connections.h"
#include "processor_selection.h"
#include "route_selection.h"
-class RouteRedirectSelection : public sigc::trackable
+class RouteRedirectSelection : public PBD::ScopedConnectionList, public sigc::trackable
{
public:
ProcessorSelection processors;
@@ -53,6 +53,10 @@ class RouteRedirectSelection : public sigc::trackable
void clear_routes ();
bool selected (boost::shared_ptr<ARDOUR::Route>);
+
+ private:
+ void removed (boost::weak_ptr<ARDOUR::Route>);
+
};
bool operator==(const RouteRedirectSelection& a, const RouteRedirectSelection& b);
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc
index 1f75bec50d..e652fbc4a3 100644
--- a/gtk2_ardour/route_time_axis.cc
+++ b/gtk2_ardour/route_time_axis.cc
@@ -100,7 +100,7 @@ RouteTimeAxisView::setup_slider_pix ()
}
}
-RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session& sess, boost::shared_ptr<Route> rt, Canvas& canvas)
+RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, boost::shared_ptr<Route> rt, Canvas& canvas)
: AxisView(sess)
, RouteUI(rt, sess)
, TimeAxisView(sess,ed,(TimeAxisView*) 0, canvas)
@@ -189,7 +189,7 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
controls_table.attach (*rec_enable_button, 5, 6, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
ARDOUR_UI::instance()->tooltips().set_tip(*rec_enable_button, _("Record"));
- rec_enable_button->set_sensitive (_session.writable());
+ rec_enable_button->set_sensitive (_session->writable());
}
controls_hbox.pack_start(gm.get_level_meter(), false, false);
@@ -269,7 +269,7 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
RouteTimeAxisView::~RouteTimeAxisView ()
{
- GoingAway (); /* EMIT_SIGNAL */
+ drop_references ();
for (list<ProcessorAutomationInfo*>::iterator i = processor_automation.begin(); i != processor_automation.end(); ++i) {
delete *i;
@@ -1044,8 +1044,8 @@ RouteTimeAxisView::use_copy_playlist (bool prompt, vector<boost::shared_ptr<Play
name = resolve_new_group_playlist_name(name, playlists_before_op);
}
- while (_session.playlists->by_name(name)) {
- name = Playlist::bump_name (name, _session);
+ while (_session->playlists->by_name(name)) {
+ name = Playlist::bump_name (name, *_session);
}
// TODO: The prompter "new" button should be de-activated if the user
@@ -1096,8 +1096,8 @@ RouteTimeAxisView::use_new_playlist (bool prompt, vector<boost::shared_ptr<Playl
name = resolve_new_group_playlist_name(name,playlists_before_op);
}
- while (_session.playlists->by_name(name)) {
- name = Playlist::bump_name (name, _session);
+ while (_session->playlists->by_name(name)) {
+ name = Playlist::bump_name (name, *_session);
}
@@ -1325,10 +1325,10 @@ RouteTimeAxisView::name_entry_changed ()
return;
}
- if (!_session.route_name_unique (x)) {
+ if (!_session->route_name_unique (x)) {
ARDOUR_UI::instance()->popup_error (_("A track already exists with that name"));
name_entry.set_text (_route->name());
- } else if (_session.route_name_internal (x)) {
+ } else if (_session->route_name_internal (x)) {
ARDOUR_UI::instance()->popup_error (_("You cannot create a track with that name as it is reserved for Ardour"));
name_entry.set_text (_route->name());
} else {
@@ -1408,7 +1408,7 @@ RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op)
case Cut:
if ((what_we_got = playlist->cut (time)) != 0) {
_editor.get_cut_buffer().add (what_we_got);
- _session.add_command( new MementoCommand<Playlist>(*playlist.get(), &before, &playlist->get_state()));
+ _session->add_command( new MementoCommand<Playlist>(*playlist.get(), &before, &playlist->get_state()));
ret = true;
}
break;
@@ -1420,7 +1420,7 @@ RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op)
case Clear:
if ((what_we_got = playlist->cut (time)) != 0) {
- _session.add_command( new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
+ _session->add_command( new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
what_we_got->release ();
ret = true;
}
@@ -1452,7 +1452,7 @@ RouteTimeAxisView::paste (nframes_t pos, float times, Selection& selection, size
XMLNode &before = playlist->get_state();
playlist->paste (*p, pos, times);
- _session.add_command( new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
+ _session->add_command( new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
return true;
}
@@ -1494,7 +1494,7 @@ RouteTimeAxisView::build_playlist_menu (Gtk::Menu * menu)
boost::shared_ptr<Diskstream> ds = get_diskstream();
RadioMenuItem::Group playlist_group;
- _session.playlists->get (playlists);
+ _session->playlists->get (playlists);
for (vector<boost::shared_ptr<Playlist> >::iterator i = playlists.begin(); i != playlists.end(); ++i) {
@@ -1584,7 +1584,7 @@ RouteTimeAxisView::use_playlist (boost::weak_ptr<Playlist> wpl)
continue;
}
- boost::shared_ptr<Playlist> ipl = session().playlists->by_name(playlist_name);
+ boost::shared_ptr<Playlist> ipl = session()->playlists->by_name(playlist_name);
if (!ipl) {
// No playlist for this track for this take yet, make it
track->diskstream()->use_new_playlist();
diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h
index f37f32b1fa..c210a55cf3 100644
--- a/gtk2_ardour/route_time_axis.h
+++ b/gtk2_ardour/route_time_axis.h
@@ -71,7 +71,7 @@ class RouteGroupMenu;
class RouteTimeAxisView : public RouteUI, public TimeAxisView
{
public:
- RouteTimeAxisView (PublicEditor&, ARDOUR::Session&, boost::shared_ptr<ARDOUR::Route>, ArdourCanvas::Canvas& canvas);
+ RouteTimeAxisView (PublicEditor&, ARDOUR::Session*, boost::shared_ptr<ARDOUR::Route>, ArdourCanvas::Canvas& canvas);
virtual ~RouteTimeAxisView ();
void show_selection (TimeSelection&);
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc
index 2b5c892c0c..31841c97ba 100644
--- a/gtk2_ardour/route_ui.cc
+++ b/gtk2_ardour/route_ui.cc
@@ -29,7 +29,6 @@
#include "ardour/dB.h"
#include "pbd/memento_command.h"
#include "pbd/stacktrace.h"
-#include "pbd/shiva.h"
#include "pbd/controllable.h"
#include "pbd/enumwriter.h"
@@ -65,13 +64,13 @@ using namespace Gtkmm2ext;
using namespace ARDOUR;
using namespace PBD;
-RouteUI::RouteUI (ARDOUR::Session& sess)
+RouteUI::RouteUI (ARDOUR::Session* sess)
: AxisView(sess)
{
init ();
}
-RouteUI::RouteUI (boost::shared_ptr<ARDOUR::Route> rt, ARDOUR::Session& sess)
+RouteUI::RouteUI (boost::shared_ptr<ARDOUR::Route> rt, ARDOUR::Session* sess)
: AxisView(sess)
{
init ();
@@ -137,8 +136,8 @@ RouteUI::init ()
show_sends_button->set_self_managed (true);
UI::instance()->set_tip (show_sends_button, _("make mixer strips show sends to this bus"), "");
- _session.SoloChanged.connect (sigc::mem_fun(*this, &RouteUI::solo_changed_so_update_mute));
- _session.TransportStateChange.connect (sigc::mem_fun (*this, &RouteUI::check_rec_enable_sensitivity));
+ _session_connections.add_connection (_session->SoloChanged.connect (sigc::mem_fun(*this, &RouteUI::solo_changed_so_update_mute)));
+ _session_connections.add_connection (_session->TransportStateChange.connect (sigc::mem_fun (*this, &RouteUI::check_rec_enable_sensitivity)));
Config->ParameterChanged.connect (sigc::mem_fun (*this, &RouteUI::parameter_changed));
}
@@ -146,12 +145,8 @@ RouteUI::init ()
void
RouteUI::reset ()
{
- //Remove route connections associated with us.
- for (vector<sigc::connection>::iterator it = connections.begin(); it!=connections.end(); ++it) {
- (*it).disconnect();
- }
-
- connections.clear ();
+ route_going_away_connection.disconnect();
+ connections.drop_connections ();
delete solo_menu;
solo_menu = 0;
@@ -170,6 +165,14 @@ RouteUI::reset ()
}
void
+RouteUI::self_delete ()
+{
+ route_going_away_connection.disconnect ();
+ connections.drop_connections ();
+ delete_when_idle (this);
+}
+
+void
RouteUI::set_route (boost::shared_ptr<Route> rp)
{
reset ();
@@ -180,28 +183,24 @@ RouteUI::set_route (boost::shared_ptr<Route> rp)
set_color (unique_random_color());
}
- /* no, there is no memory leak here. This object cleans itself (and other stuff)
- up when the route is destroyed.
- */
-
if (self_destruct) {
- new PairedShiva<Route,RouteUI> (*_route, *this);
+ route_going_away_connection = rp->GoingAway.connect (boost::bind (&RouteUI::self_delete, this));
}
mute_button->set_controllable (_route->mute_control());
solo_button->set_controllable (_route->solo_control());
- connections.push_back (_route->active_changed.connect (sigc::mem_fun (*this, &RouteUI::route_active_changed)));
- connections.push_back (_route->mute_changed.connect (sigc::mem_fun(*this, &RouteUI::mute_changed)));
- connections.push_back (_route->solo_changed.connect (sigc::mem_fun(*this, &RouteUI::solo_changed)));
- connections.push_back (_route->listen_changed.connect (sigc::mem_fun(*this, &RouteUI::listen_changed)));
- connections.push_back (_route->solo_isolated_changed.connect (sigc::mem_fun(*this, &RouteUI::solo_changed)));
+ connections.add_connection (_route->active_changed.connect (sigc::mem_fun (*this, &RouteUI::route_active_changed)));
+ connections.add_connection (_route->mute_changed.connect (sigc::mem_fun(*this, &RouteUI::mute_changed)));
+ connections.add_connection (_route->solo_changed.connect (sigc::mem_fun(*this, &RouteUI::solo_changed)));
+ connections.add_connection (_route->listen_changed.connect (sigc::mem_fun(*this, &RouteUI::listen_changed)));
+ connections.add_connection (_route->solo_isolated_changed.connect (sigc::mem_fun(*this, &RouteUI::solo_changed)));
- if (_session.writable() && is_track()) {
+ if (_session->writable() && is_track()) {
boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track>(_route);
- connections.push_back (t->diskstream()->RecordEnableChanged.connect (sigc::mem_fun (*this, &RouteUI::route_rec_enable_changed)));
- connections.push_back (_session.RecordStateChanged.connect (sigc::mem_fun (*this, &RouteUI::session_rec_enable_changed)));
+ connections.add_connection (t->diskstream()->RecordEnableChanged.connect (sigc::mem_fun (*this, &RouteUI::route_rec_enable_changed)));
+ connections.add_connection (_session->RecordStateChanged.connect (sigc::mem_fun (*this, &RouteUI::session_rec_enable_changed)));
rec_enable_button->show();
rec_enable_button->set_controllable (t->rec_enable_control());
@@ -265,10 +264,10 @@ RouteUI::mute_press (GdkEventButton* ev)
if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
if (_mute_release) {
- _mute_release->routes = _session.get_routes ();
+ _mute_release->routes = _session->get_routes ();
}
- _session.set_mute (_session.get_routes(), !_route->muted());
+ _session->set_mute (_session->get_routes(), !_route->muted());
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
@@ -278,10 +277,10 @@ RouteUI::mute_press (GdkEventButton* ev)
if (ev->button == 1 && _route->route_group()) {
if (_mute_release) {
- _mute_release->routes = _session.get_routes ();
+ _mute_release->routes = _session->get_routes ();
}
- _session.set_mute (_session.get_routes(), !_route->muted(), Session::rt_cleanup, true);
+ _session->set_mute (_session->get_routes(), !_route->muted(), Session::rt_cleanup, true);
}
} else {
@@ -295,7 +294,7 @@ RouteUI::mute_press (GdkEventButton* ev)
_mute_release->routes = rl;
}
- _session.set_mute (rl, !_route->muted());
+ _session->set_mute (rl, !_route->muted());
}
}
@@ -311,7 +310,7 @@ RouteUI::mute_release (GdkEventButton*)
{
if (!ignore_toggle) {
if (_mute_release){
- _session.set_mute (_mute_release->routes, _mute_release->active, Session::rt_cleanup, true);
+ _session->set_mute (_mute_release->routes, _mute_release->active, Session::rt_cleanup, true);
delete _mute_release;
_mute_release = 0;
}
@@ -362,13 +361,13 @@ RouteUI::solo_press(GdkEventButton* ev)
/* Primary-Tertiary-click applies change to all routes */
if (_solo_release) {
- _solo_release->routes = _session.get_routes ();
+ _solo_release->routes = _session->get_routes ();
}
if (Config->get_solo_control_is_listen_control()) {
- _session.set_listen (_session.get_routes(), !_route->listening(), Session::rt_cleanup, true);
+ _session->set_listen (_session->get_routes(), !_route->listening(), Session::rt_cleanup, true);
} else {
- _session.set_solo (_session.get_routes(), !_route->soloed(), Session::rt_cleanup, true);
+ _session->set_solo (_session->get_routes(), !_route->soloed(), Session::rt_cleanup, true);
}
} else if (Keyboard::modifier_state_contains (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
@@ -378,7 +377,7 @@ RouteUI::solo_press(GdkEventButton* ev)
if (_solo_release) {
_solo_release->exclusive = true;
- boost::shared_ptr<RouteList> routes = _session.get_routes();
+ boost::shared_ptr<RouteList> routes = _session->get_routes();
for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) {
if ((*i)->soloed ()) {
@@ -392,7 +391,7 @@ RouteUI::solo_press(GdkEventButton* ev)
if (Config->get_solo_control_is_listen_control()) {
/* ??? we need a just_one_listen() method */
} else {
- _session.set_just_one_solo (_route, true);
+ _session->set_just_one_solo (_route, true);
}
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
@@ -416,9 +415,9 @@ RouteUI::solo_press(GdkEventButton* ev)
}
if (Config->get_solo_control_is_listen_control()) {
- _session.set_listen (_route->route_group()->route_list(), !_route->listening(), Session::rt_cleanup, true);
+ _session->set_listen (_route->route_group()->route_list(), !_route->listening(), Session::rt_cleanup, true);
} else {
- _session.set_solo (_route->route_group()->route_list(), !_route->soloed(), Session::rt_cleanup, true);
+ _session->set_solo (_route->route_group()->route_list(), !_route->soloed(), Session::rt_cleanup, true);
}
}
@@ -434,9 +433,9 @@ RouteUI::solo_press(GdkEventButton* ev)
}
if (Config->get_solo_control_is_listen_control()) {
- _session.set_listen (rl, !_route->listening());
+ _session->set_listen (rl, !_route->listening());
} else {
- _session.set_solo (rl, !_route->soloed());
+ _session->set_solo (rl, !_route->soloed());
}
}
}
@@ -456,7 +455,7 @@ RouteUI::solo_release (GdkEventButton*)
if (_solo_release->exclusive) {
} else {
- _session.set_solo (_solo_release->routes, _solo_release->active, Session::rt_cleanup, true);
+ _session->set_solo (_solo_release->routes, _solo_release->active, Session::rt_cleanup, true);
}
delete _solo_release;
@@ -474,7 +473,7 @@ RouteUI::rec_enable_press(GdkEventButton* ev)
return true;
}
- if (!_session.engine().connected()) {
+ if (!_session->engine().connected()) {
MessageDialog msg (_("Not connected to JACK - cannot engage record"));
msg.run ();
return true;
@@ -489,7 +488,7 @@ RouteUI::rec_enable_press(GdkEventButton* ev)
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
- _session.set_record_enable (_session.get_routes(), !rec_enable_button->get_active());
+ _session->set_record_enable (_session->get_routes(), !rec_enable_button->get_active());
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
@@ -497,7 +496,7 @@ RouteUI::rec_enable_press(GdkEventButton* ev)
NOTE: Primary-button2 is MIDI learn.
*/
if (ev->button == 1 && _route->route_group()) {
- _session.set_record_enable (_route->route_group()->route_list(), !rec_enable_button->get_active(), Session::rt_cleanup, true);
+ _session->set_record_enable (_route->route_group()->route_list(), !rec_enable_button->get_active(), Session::rt_cleanup, true);
}
} else if (Keyboard::is_context_menu_event (ev)) {
@@ -508,7 +507,7 @@ RouteUI::rec_enable_press(GdkEventButton* ev)
boost::shared_ptr<RouteList> rl (new RouteList);
rl->push_back (route());
- _session.set_record_enable (rl, !rec_enable_button->get_active());
+ _session->set_record_enable (rl, !rec_enable_button->get_active());
}
}
@@ -543,7 +542,7 @@ RouteUI::build_sends_menu ()
void
RouteUI::create_sends (Placement p)
{
- _session.globally_add_internal_sends (_route, p);
+ _session->globally_add_internal_sends (_route, p);
}
void
@@ -564,25 +563,25 @@ RouteUI::create_selected_sends (Placement p)
}
}
- _session.add_internal_sends (_route, p, rlist);
+ _session->add_internal_sends (_route, p, rlist);
}
void
RouteUI::set_sends_gain_from_track ()
{
- _session.globally_set_send_gains_from_track (_route);
+ _session->globally_set_send_gains_from_track (_route);
}
void
RouteUI::set_sends_gain_to_zero ()
{
- _session.globally_set_send_gains_to_zero (_route);
+ _session->globally_set_send_gains_to_zero (_route);
}
void
RouteUI::set_sends_gain_to_unity ()
{
- _session.globally_set_send_gains_to_unity (_route);
+ _session->globally_set_send_gains_to_unity (_route);
}
bool
@@ -767,7 +766,7 @@ RouteUI::mute_changed(void* /*src*/)
}
int
-RouteUI::mute_visual_state (Session& s, boost::shared_ptr<Route> r)
+RouteUI::mute_visual_state (Session* s, boost::shared_ptr<Route> r)
{
if (r->is_master() || r->is_control()) {
return 0;
@@ -778,7 +777,7 @@ RouteUI::mute_visual_state (Session& s, boost::shared_ptr<Route> r)
if (r->muted ()) {
/* full mute */
return 2;
- } else if (s.soloing() && !r->soloed() && !r->solo_isolated()) {
+ } else if (s->soloing() && !r->soloed() && !r->solo_isolated()) {
/* mute-because-not-soloed */
return 1;
} else {
@@ -851,7 +850,7 @@ RouteUI::update_rec_display ()
if (model) {
- switch (_session.record_status ()) {
+ switch (_session->record_status ()) {
case Session::Recording:
rec_enable_button->set_visual_state (1);
break;
@@ -1110,7 +1109,7 @@ RouteUI::remove_this_route ()
gint
RouteUI::idle_remove_this_route (RouteUI *rui)
{
- rui->_session.remove_route (rui->_route);
+ rui->_session->remove_route (rui->_route);
return false;
}
@@ -1329,7 +1328,7 @@ RouteUI::map_frozen ()
void
RouteUI::adjust_latency ()
{
- LatencyDialog dialog (_route->name() + _(" latency"), *(_route->output()), _session.frame_rate(), _session.engine().frames_per_cycle());
+ LatencyDialog dialog (_route->name() + _(" latency"), *(_route->output()), _session->frame_rate(), _session->engine().frames_per_cycle());
}
void
@@ -1370,7 +1369,7 @@ RouteUI::save_as_template ()
void
RouteUI::check_rec_enable_sensitivity ()
{
- if (_session.transport_rolling() && rec_enable_button->get_active() && Config->get_disable_disarm_during_roll()) {
+ if (_session->transport_rolling() && rec_enable_button->get_active() && Config->get_disable_disarm_during_roll()) {
rec_enable_button->set_sensitive (false);
} else {
rec_enable_button->set_sensitive (true);
@@ -1420,7 +1419,7 @@ RouteUI::open_remote_control_id_dialog ()
{
ArdourDialog dialog (_("Remote Control ID"));
- uint32_t const limit = _session.ntracks() + _session.nbusses () + 4;
+ uint32_t const limit = _session->ntracks() + _session->nbusses () + 4;
HBox* hbox = manage (new HBox);
hbox->set_spacing (6);
diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h
index 21d335ef79..a4d7e43b7d 100644
--- a/gtk2_ardour/route_ui.h
+++ b/gtk2_ardour/route_ui.h
@@ -23,6 +23,8 @@
#include <list>
#include "pbd/xml++.h"
+#include "pbd/scoped_connections.h"
+
#include "ardour/ardour.h"
#include "ardour/mute_master.h"
#include "ardour/session_event.h"
@@ -49,8 +51,8 @@ class BindableToggleButton;
class RouteUI : public virtual AxisView
{
public:
- RouteUI(ARDOUR::Session&);
- RouteUI(boost::shared_ptr<ARDOUR::Route>, ARDOUR::Session&);
+ RouteUI(ARDOUR::Session*);
+ RouteUI(boost::shared_ptr<ARDOUR::Route>, ARDOUR::Session*);
virtual ~RouteUI();
@@ -194,16 +196,18 @@ class RouteUI : public virtual AxisView
static int solo_visual_state (boost::shared_ptr<ARDOUR::Route>);
static int solo_visual_state_with_isolate (boost::shared_ptr<ARDOUR::Route>);
static int solo_isolate_visual_state (boost::shared_ptr<ARDOUR::Route>);
- static int mute_visual_state (ARDOUR::Session &, boost::shared_ptr<ARDOUR::Route>);
+ static int mute_visual_state (ARDOUR::Session*, boost::shared_ptr<ARDOUR::Route>);
protected:
- std::vector<sigc::connection> connections;
+ PBD::ScopedConnectionList connections;
+ boost::signals2::scoped_connection route_going_away_connection;
bool self_destruct;
void init ();
void reset ();
void queue_route_group_op (ARDOUR::RouteGroup::Property prop, void (ARDOUR::Session::*session_method)(boost::shared_ptr<ARDOUR::RouteList>, bool), bool yn);
+ void self_delete ();
private:
void check_rec_enable_sensitivity ();
@@ -225,6 +229,7 @@ class RouteUI : public virtual AxisView
SoloMuteRelease* _solo_release;
SoloMuteRelease* _mute_release;
+
};
#endif /* __ardour_route_ui__ */
diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc
index da706a34d7..d2f1a67476 100644
--- a/gtk2_ardour/selection.cc
+++ b/gtk2_ardour/selection.cc
@@ -45,6 +45,7 @@ struct AudioRangeComparator {
}
};
+#if 0
Selection&
Selection::operator= (const Selection& other)
{
@@ -58,6 +59,7 @@ Selection::operator= (const Selection& other)
}
return *this;
}
+#endif
bool
operator== (const Selection& a, const Selection& b)
@@ -207,7 +209,7 @@ Selection::toggle (TimeAxisView* track)
if ((i = find (tracks.begin(), tracks.end(), track)) == tracks.end()) {
void (Selection::*pmf)(TimeAxisView*) = &Selection::remove;
- track->GoingAway.connect (sigc::bind (sigc::mem_fun (*this, pmf), track));
+ track->GoingAway.connect (boost::bind (pmf, this, track));
tracks.push_back (track);
} else {
tracks.erase (i);
@@ -336,7 +338,7 @@ Selection::add (const TrackViewList& track_list)
for (list<TimeAxisView*>::const_iterator i = added.begin(); i != added.end(); ++i) {
void (Selection::*pmf)(TimeAxisView*) = &Selection::remove;
- (*i)->GoingAway.connect (sigc::bind (sigc::mem_fun (*this, pmf), (*i)));
+ scoped_connect ((*i)->GoingAway, boost::bind (pmf, this, (*i)));
}
if (!added.empty()) {
@@ -947,7 +949,7 @@ Selection::add (Marker* m)
void (Selection::*pmf)(Marker*) = &Selection::remove;
- m->GoingAway.connect (sigc::bind (sigc::mem_fun (*this, pmf), m));
+ scoped_connect (m->GoingAway, boost::bind (pmf, this, m));
markers.push_back (m);
MarkersChanged();
diff --git a/gtk2_ardour/selection.h b/gtk2_ardour/selection.h
index f95b1dbfbe..739d3b4c01 100644
--- a/gtk2_ardour/selection.h
+++ b/gtk2_ardour/selection.h
@@ -25,6 +25,8 @@
#include <sigc++/signal.h>
+#include "pbd/scoped_connections.h"
+
#include "time_selection.h"
#include "region_selection.h"
#include "track_selection.h"
@@ -57,7 +59,7 @@ namespace Evoral {
/** The Selection class holds lists of selected items (tracks, regions, etc. etc.). */
-class Selection : public sigc::trackable
+class Selection : public sigc::trackable, public PBD::ScopedConnectionList
{
public:
enum SelectionType {
@@ -86,7 +88,7 @@ class Selection : public sigc::trackable
clear();
}
- Selection& operator= (const Selection& other);
+ // Selection& operator= (const Selection& other);
sigc::signal<void> RegionsChanged;
sigc::signal<void> TracksChanged;
@@ -185,9 +187,10 @@ class Selection : public sigc::trackable
template<class A> void foreach_region (void (ARDOUR::Region::*method)(A), A arg);
private:
+ Selection (const Selection& other) {}
PublicEditor const * editor;
uint32_t next_time_id;
-
+
void add (std::vector<AutomationSelectable*>&);
};
diff --git a/gtk2_ardour/send_ui.cc b/gtk2_ardour/send_ui.cc
index 98dfab5860..1617ccd96a 100644
--- a/gtk2_ardour/send_ui.cc
+++ b/gtk2_ardour/send_ui.cc
@@ -34,11 +34,10 @@ using namespace std;
using namespace ARDOUR;
using namespace PBD;
-SendUI::SendUI (Gtk::Window* parent, boost::shared_ptr<Send> s, Session& se)
+SendUI::SendUI (Gtk::Window* parent, boost::shared_ptr<Send> s, Session* session)
: _send (s)
- , _session (se)
- , _gpm (se, 250)
- , _panners (se)
+ , _gpm (session, 250)
+ , _panners (session)
{
_panners.set_panner (s->panner());
_gpm.set_controls (boost::shared_ptr<Route>(), s->meter(), s->amp());
@@ -52,7 +51,7 @@ SendUI::SendUI (Gtk::Window* parent, boost::shared_ptr<Send> s, Session& se)
_vbox.pack_start (_hbox, false, false, false);
_vbox.pack_start (_panners, false, false);
- io = manage (new IOSelector (parent, &se, s->output()));
+ io = manage (new IOSelector (parent, session, s->output()));
pack_start (_vbox, false, false);
@@ -119,10 +118,10 @@ SendUI::fast_update ()
}
}
-SendUIWindow::SendUIWindow (boost::shared_ptr<Send> s, Session& ss)
+SendUIWindow::SendUIWindow (boost::shared_ptr<Send> s, Session* session)
: ArdourDialog (string("Ardour: send ") + s->name())
{
- ui = new SendUI (this, s, ss);
+ ui = new SendUI (this, s, session);
hpacker.pack_start (*ui, true, true);
@@ -131,8 +130,7 @@ SendUIWindow::SendUIWindow (boost::shared_ptr<Send> s, Session& ss)
set_name ("SendUIWindow");
- going_away_connection = s->GoingAway.connect (
- sigc::mem_fun (*this, &SendUIWindow::send_going_away));
+ going_away_connection = s->GoingAway.connect (sigc::mem_fun (*this, &SendUIWindow::send_going_away));
signal_delete_event().connect (sigc::bind (
sigc::ptr_fun (just_hide_it),
@@ -148,7 +146,7 @@ void
SendUIWindow::send_going_away ()
{
ENSURE_GUI_THREAD (*this, &SendUIWindow::send_going_away)
- delete_when_idle (this);
going_away_connection.disconnect ();
+ delete_when_idle (this);
}
diff --git a/gtk2_ardour/send_ui.h b/gtk2_ardour/send_ui.h
index df5a8a216e..16543140a8 100644
--- a/gtk2_ardour/send_ui.h
+++ b/gtk2_ardour/send_ui.h
@@ -26,7 +26,6 @@
namespace ARDOUR {
class Send;
- class Session;
class IOProcessor;
}
@@ -35,7 +34,7 @@ class IOSelector;
class SendUI : public Gtk::HBox
{
public:
- SendUI (Gtk::Window *, boost::shared_ptr<ARDOUR::Send>, ARDOUR::Session&);
+ SendUI (Gtk::Window *, boost::shared_ptr<ARDOUR::Send>, ARDOUR::Session*);
~SendUI();
void update ();
@@ -47,7 +46,6 @@ class SendUI : public Gtk::HBox
private:
boost::shared_ptr<ARDOUR::Send> _send;
- ARDOUR::Session& _session;
GainMeter _gpm;
PannerUI _panners;
Gtk::VBox _vbox;
@@ -63,7 +61,7 @@ class SendUI : public Gtk::HBox
class SendUIWindow : public ArdourDialog
{
public:
- SendUIWindow(boost::shared_ptr<ARDOUR::Send>, ARDOUR::Session&);
+ SendUIWindow(boost::shared_ptr<ARDOUR::Send>, ARDOUR::Session*);
~SendUIWindow();
SendUI* ui;
@@ -72,7 +70,7 @@ class SendUIWindow : public ArdourDialog
Gtk::HBox hpacker;
void send_going_away ();
- sigc::connection going_away_connection;
+ boost::signals2::scoped_connection going_away_connection;
};
#endif /* __ardour_gtk_send_ui_h__ */
diff --git a/gtk2_ardour/session_import_dialog.cc b/gtk2_ardour/session_import_dialog.cc
index 5511a0d68f..4b5793271b 100644
--- a/gtk2_ardour/session_import_dialog.cc
+++ b/gtk2_ardour/session_import_dialog.cc
@@ -36,11 +36,12 @@
using namespace std;
using namespace ARDOUR;
-SessionImportDialog::SessionImportDialog (ARDOUR::Session & target) :
+SessionImportDialog::SessionImportDialog (ARDOUR::Session* target) :
ArdourDialog (_("Import from session")),
- target (target),
file_browse_button (_("Browse"))
{
+ set_session (target);
+
// File entry
file_entry.set_name ("ImportFileNameEntry");
file_entry.set_text ("/");
@@ -101,24 +102,26 @@ SessionImportDialog::SessionImportDialog (ARDOUR::Session & target) :
void
SessionImportDialog::load_session (const string& filename)
{
- tree.read (filename);
- boost::shared_ptr<AudioRegionImportHandler> region_handler (new AudioRegionImportHandler (tree, target));
- boost::shared_ptr<AudioPlaylistImportHandler> pl_handler (new AudioPlaylistImportHandler (tree, target, *region_handler));
-
- handlers.push_back (boost::static_pointer_cast<ElementImportHandler> (region_handler));
- handlers.push_back (boost::static_pointer_cast<ElementImportHandler> (pl_handler));
- handlers.push_back (HandlerPtr(new UnusedAudioPlaylistImportHandler (tree, target, *region_handler)));
- handlers.push_back (HandlerPtr(new AudioTrackImportHandler (tree, target, *pl_handler)));
- handlers.push_back (HandlerPtr(new LocationImportHandler (tree, target)));
- handlers.push_back (HandlerPtr(new TempoMapImportHandler (tree, target)));
-
- fill_list();
-
- if (ElementImportHandler::dirty()) {
- // Warn user
- string txt = _("Some elements had errors in them. Please see the log for details");
- Gtk::MessageDialog msg (txt, false, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_OK, true);
- msg.run();
+ if (_session) {
+ tree.read (filename);
+ boost::shared_ptr<AudioRegionImportHandler> region_handler (new AudioRegionImportHandler (tree, *_session));
+ boost::shared_ptr<AudioPlaylistImportHandler> pl_handler (new AudioPlaylistImportHandler (tree, *_session, *region_handler));
+
+ handlers.push_back (boost::static_pointer_cast<ElementImportHandler> (region_handler));
+ handlers.push_back (boost::static_pointer_cast<ElementImportHandler> (pl_handler));
+ handlers.push_back (HandlerPtr(new UnusedAudioPlaylistImportHandler (tree, *_session, *region_handler)));
+ handlers.push_back (HandlerPtr(new AudioTrackImportHandler (tree, *_session, *pl_handler)));
+ handlers.push_back (HandlerPtr(new LocationImportHandler (tree, *_session)));
+ handlers.push_back (HandlerPtr(new TempoMapImportHandler (tree, *_session)));
+
+ fill_list();
+
+ if (ElementImportHandler::dirty()) {
+ // Warn user
+ string txt = _("Some elements had errors in them. Please see the log for details");
+ Gtk::MessageDialog msg (txt, false, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_OK, true);
+ msg.run();
+ }
}
}
diff --git a/gtk2_ardour/session_import_dialog.h b/gtk2_ardour/session_import_dialog.h
index 4144d07c88..01cbb6c0cc 100644
--- a/gtk2_ardour/session_import_dialog.h
+++ b/gtk2_ardour/session_import_dialog.h
@@ -48,7 +48,7 @@ class SessionImportDialog : public ArdourDialog
typedef std::list<ElementPtr> ElementList;
public:
- SessionImportDialog (ARDOUR::Session & target);
+ SessionImportDialog (ARDOUR::Session* target);
virtual Gtk::FileChooserAction browse_action() const { return Gtk::FILE_CHOOSER_ACTION_OPEN; }
@@ -68,7 +68,6 @@ class SessionImportDialog : public ArdourDialog
// Data
HandlerList handlers;
XMLTree tree;
- ARDOUR::Session &target;
// GUI
Gtk::Frame file_frame;
diff --git a/gtk2_ardour/session_metadata_dialog.cc b/gtk2_ardour/session_metadata_dialog.cc
index 6feec36fdf..0bce776c62 100644
--- a/gtk2_ardour/session_metadata_dialog.cc
+++ b/gtk2_ardour/session_metadata_dialog.cc
@@ -216,7 +216,6 @@ NumberMetadataField::str_to_uint (ustring const & str) const
SessionMetadataSet::SessionMetadataSet (ustring const & name) :
name (name)
{
- session = 0;
}
void
@@ -247,9 +246,13 @@ SessionMetadataSetEditable::get_tab_widget ()
void
SessionMetadataSetEditable::set_session (ARDOUR::Session * s)
{
- session = s;
+ SessionHandlePtr::set_session (s);
- ARDOUR::SessionMetadata const & data = session->metadata();
+ if (!_session) {
+ return;
+ }
+
+ ARDOUR::SessionMetadata const & data = _session->metadata();
table.resize (list.size(), 2);
uint32_t row = 0;
@@ -266,7 +269,7 @@ SessionMetadataSetEditable::set_session (ARDOUR::Session * s)
void
SessionMetadataSetEditable::save_data ()
{
- ARDOUR::SessionMetadata & data = session->metadata();
+ ARDOUR::SessionMetadata & data = _session->metadata();
for (DataList::const_iterator it = list.begin(); it != list.end(); ++it) {
(*it)->save_data(data);
}
@@ -300,8 +303,6 @@ SessionMetadataSetImportable::SessionMetadataSetImportable (ustring const & name
tree_view.append_column (*viewcol);
select_all_check.signal_toggled().connect (sigc::mem_fun(*this, &SessionMetadataSetImportable::select_all));
-
- session = 0;
}
Gtk::Widget &
@@ -321,12 +322,12 @@ SessionMetadataSetImportable::get_select_all_widget ()
void
SessionMetadataSetImportable::load_extra_data (ARDOUR::SessionMetadata const & data)
{
- if (!session) {
+ if (!_session) {
std::cerr << "Programming error: no session set for SessionMetaDataSetImportable (in load_data)!" << std::endl;
return;
}
- ARDOUR::SessionMetadata & session_data = session->metadata();
+ ARDOUR::SessionMetadata & session_data = _session->metadata();
MetadataPtr session_field;
MetadataPtr import_field;
@@ -369,12 +370,12 @@ SessionMetadataSetImportable::load_extra_data (ARDOUR::SessionMetadata const & d
void
SessionMetadataSetImportable::save_data ()
{
- if (!session) {
+ if (!_session) {
std::cerr << "Programming error: no session set for SessionMetaDataSetImportable (in import_data)!" << std::endl;
return;
}
- ARDOUR::SessionMetadata & session_data = session->metadata();
+ ARDOUR::SessionMetadata & session_data = _session->metadata();
Gtk::TreeModel::Children fields = tree->children();
Gtk::TreeModel::Children::iterator it;
@@ -425,7 +426,7 @@ template <typename DataSet>
void
SessionMetadataDialog<DataSet>::init_data ()
{
- if (!session) {
+ if (!_session) {
std::cerr << "Programming error: no session set for SessionMetaDataDialog (in init_data)!" << std::endl;
return;
}
@@ -435,7 +436,7 @@ SessionMetadataDialog<DataSet>::init_data ()
init_people_data ();
for (DataSetList::iterator it = data_list.begin(); it != data_list.end(); ++it) {
- (*it)->set_session (session);
+ (*it)->set_session (_session);
notebook.append_page ((*it)->get_widget(), (*it)->get_tab_widget());
}
@@ -659,7 +660,7 @@ SessionMetadataImporter::~SessionMetadataImporter ()
void
SessionMetadataImporter::run ()
{
- if (!session) {
+ if (!_session) {
std::cerr << "Programming error: no session set for SessionMetaDataImporter (in run)!" << std::endl;
return;
}
diff --git a/gtk2_ardour/session_metadata_dialog.h b/gtk2_ardour/session_metadata_dialog.h
index 3e618c079f..be64c90ae9 100644
--- a/gtk2_ardour/session_metadata_dialog.h
+++ b/gtk2_ardour/session_metadata_dialog.h
@@ -117,15 +117,13 @@ class NumberMetadataField : public MetadataField {
};
/// Interface for MetadataFields
-class SessionMetadataSet {
+class SessionMetadataSet : public ARDOUR::SessionHandlePtr {
public:
SessionMetadataSet (Glib::ustring const & name);
virtual ~SessionMetadataSet () {};
void add_data_field (MetadataPtr field);
- /// Sets session, into which the data is eventually saved
- virtual void set_session (ARDOUR::Session * s) { session = s; }
/// allows loading extra data into data sets (for importing etc.)
virtual void load_extra_data (ARDOUR::SessionMetadata const & /*data*/) { }
/// Saves data to session
@@ -138,7 +136,6 @@ class SessionMetadataSet {
typedef std::list<MetadataPtr> DataList;
DataList list;
Glib::ustring name;
- ARDOUR::Session *session;
};
/// Contains MetadataFields for editing
diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc
index 05eacd1367..6919be9f62 100644
--- a/gtk2_ardour/sfdb_ui.cc
+++ b/gtk2_ardour/sfdb_ui.cc
@@ -113,8 +113,7 @@ importmode2string (ImportMode mode)
}
SoundFileBox::SoundFileBox (bool persistent)
- : _session(0),
- table (6, 2),
+ : table (6, 2),
length_clock ("sfboxLengthClock", !persistent, "EditCursorClock", false, false, true, false),
timecode_clock ("sfboxTimecodeClock", !persistent, "EditCursorClock", false, false, false, false),
main_box (false, 6),
@@ -202,16 +201,15 @@ SoundFileBox::SoundFileBox (bool persistent)
void
SoundFileBox::set_session(Session* s)
{
- _session = s;
+ SessionHandlePtr::set_session (s);
+
+ length_clock.set_session (s);
+ timecode_clock.set_session (s);
if (!_session) {
play_btn.set_sensitive (false);
stop_btn.set_sensitive (false);
}
-
-
- length_clock.set_session (s);
- timecode_clock.set_session (s);
}
bool
@@ -582,7 +580,8 @@ SoundFileBrowser::set_session (Session* s)
{
ArdourDialog::set_session (s);
preview.set_session (s);
- if (s) {
+
+ if (_session) {
add_gain_meter ();
} else {
remove_gain_meter ();
@@ -594,9 +593,9 @@ SoundFileBrowser::add_gain_meter ()
{
delete gm;
- gm = new GainMeter (*session, 250);
+ gm = new GainMeter (_session, 250);
- boost::shared_ptr<Route> r = session->the_auditioner ();
+ boost::shared_ptr<Route> r = _session->the_auditioner ();
gm->set_controls (r, r->shared_peak_meter(), r->amp());
@@ -633,7 +632,7 @@ SoundFileBrowser::stop_metering ()
void
SoundFileBrowser::meter ()
{
- if (is_mapped () && session && gm) {
+ if (is_mapped () && _session && gm) {
gm->update_meters ();
}
}
@@ -906,7 +905,7 @@ SoundFileOmega::reset_options ()
bool same_size;
bool src_needed;
bool selection_includes_multichannel;
- bool selection_can_be_embedded_with_links = check_link_status (*session, paths);
+ bool selection_can_be_embedded_with_links = check_link_status (_session, paths);
ImportMode mode;
if (check_info (paths, same_size, src_needed, selection_includes_multichannel)) {
@@ -1100,7 +1099,7 @@ SoundFileOmega::check_info (const vector<ustring>& paths, bool& same_size, bool&
}
}
- if ((nframes_t) info.samplerate != session->frame_rate()) {
+ if ((nframes_t) info.samplerate != _session->frame_rate()) {
src_needed = true;
}
@@ -1126,9 +1125,9 @@ SoundFileOmega::check_info (const vector<ustring>& paths, bool& same_size, bool&
bool
-SoundFileOmega::check_link_status (const Session& s, const vector<ustring>& paths)
+SoundFileOmega::check_link_status (const Session* s, const vector<ustring>& paths)
{
- sys::path path = s.session_directory().sound_path() / "linktest";
+ sys::path path = s->session_directory().sound_path() / "linktest";
string tmpdir = path.to_string();
bool ret = false;
@@ -1174,8 +1173,8 @@ SoundFileChooser::on_hide ()
ArdourDialog::on_hide();
stop_metering ();
- if (session) {
- session->cancel_audition();
+ if (_session) {
+ _session->cancel_audition();
}
}
@@ -1360,8 +1359,8 @@ void
SoundFileOmega::on_hide ()
{
ArdourDialog::on_hide();
- if (session) {
- session->cancel_audition();
+ if (_session) {
+ _session->cancel_audition();
}
}
diff --git a/gtk2_ardour/sfdb_ui.h b/gtk2_ardour/sfdb_ui.h
index c3030669c2..15affab570 100644
--- a/gtk2_ardour/sfdb_ui.h
+++ b/gtk2_ardour/sfdb_ui.h
@@ -39,6 +39,7 @@
#include <gtkmm/textview.h>
#include "ardour/audiofilesource.h"
+#include "ardour/session_handle.h"
#include "ardour_dialog.h"
#include "editing.h"
@@ -50,7 +51,7 @@ namespace ARDOUR {
class GainMeter;
-class SoundFileBox : public Gtk::VBox
+class SoundFileBox : public Gtk::VBox, public ARDOUR::SessionHandlePtr
{
public:
SoundFileBox (bool persistent);
@@ -64,7 +65,6 @@ class SoundFileBox : public Gtk::VBox
bool autoplay () const;
protected:
- ARDOUR::Session* _session;
Glib::ustring path;
ARDOUR::SoundFileInfo sf_info;
@@ -241,7 +241,7 @@ class SoundFileOmega : public SoundFileBrowser
bool check_info (const std::vector<Glib::ustring>& paths,
bool& same_size, bool& src_needed, bool& multichannel);
- static bool check_link_status (const ARDOUR::Session&, const std::vector<Glib::ustring>& paths);
+ static bool check_link_status (const ARDOUR::Session*, const std::vector<Glib::ustring>& paths);
void file_selection_changed ();
bool reset_options ();
diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc
index 168ddb3904..626e2bf537 100644
--- a/gtk2_ardour/streamview.cc
+++ b/gtk2_ardour/streamview.cc
@@ -79,16 +79,12 @@ StreamView::StreamView (RouteTimeAxisView& tv, ArdourCanvas::Group* group)
canvas_rect, &_trackview));
if (_trackview.is_track()) {
- _trackview.track()->DiskstreamChanged.connect (
- sigc::mem_fun (*this, &StreamView::diskstream_changed));
- _trackview.session().TransportStateChange.connect (
- sigc::mem_fun (*this, &StreamView::transport_changed));
- _trackview.session().TransportLooped.connect (
- sigc::mem_fun (*this, &StreamView::transport_looped));
- _trackview.get_diskstream()->RecordEnableChanged.connect (
- sigc::mem_fun (*this, &StreamView::rec_enable_changed));
- _trackview.session().RecordStateChanged.connect (
- sigc::mem_fun (*this, &StreamView::sess_rec_enable_changed));
+ scoped_connect (_trackview.track()->DiskstreamChanged, boost::bind (&StreamView::diskstream_changed, this));
+ scoped_connect (_trackview.get_diskstream()->RecordEnableChanged, boost::bind (&StreamView::rec_enable_changed, this));
+
+ scoped_connect (_trackview.session()->TransportStateChange, boost::bind (&StreamView::transport_changed, this));
+ scoped_connect (_trackview.session()->TransportLooped, boost::bind (&StreamView::transport_looped, this));
+ scoped_connect (_trackview.session()->RecordStateChanged, boost::bind (&StreamView::sess_rec_enable_changed, this));
}
ColorsChanged.connect (sigc::mem_fun (*this, &StreamView::color_handler));
@@ -96,6 +92,8 @@ StreamView::StreamView (RouteTimeAxisView& tv, ArdourCanvas::Group* group)
StreamView::~StreamView ()
{
+ cerr << "Streamview " << _trackview.name() << " deleted\n";
+
undisplay_diskstream ();
delete canvas_rect;
@@ -210,6 +208,7 @@ StreamView::remove_region_view (boost::weak_ptr<Region> weak_r)
if (((*i)->region()) == r) {
RegionView* rv = *i;
region_views.erase (i);
+ cerr << "Deleting RV for " << r->name() << " @ " << r << endl;
delete rv;
break;
}
@@ -234,9 +233,7 @@ StreamView::display_diskstream (boost::shared_ptr<Diskstream> ds)
{
playlist_change_connection.disconnect();
playlist_changed (ds);
- playlist_change_connection = ds->PlaylistChanged.connect (
- sigc::bind (sigc::mem_fun (*this, &StreamView::playlist_changed_weak),
- boost::weak_ptr<Diskstream> (ds)));
+ playlist_change_connection = ds->PlaylistChanged.connect (boost::bind (&StreamView::playlist_changed_weak, this, boost::weak_ptr<Diskstream> (ds)));
}
void
@@ -342,12 +339,7 @@ StreamView::playlist_changed (boost::shared_ptr<Diskstream> ds)
/* disconnect from old playlist */
- for (vector<sigc::connection>::iterator i = playlist_connections.begin();
- i != playlist_connections.end(); ++i) {
- (*i).disconnect();
- }
-
- playlist_connections.clear();
+ playlist_connections.drop_connections ();
undisplay_diskstream ();
/* update layers count and the y positions and heights of our regions */
@@ -363,14 +355,9 @@ StreamView::playlist_changed (boost::shared_ptr<Diskstream> ds)
/* catch changes */
- playlist_connections.push_back (ds->playlist()->Modified.connect (sigc::bind (
- sigc::mem_fun (*this, &StreamView::playlist_modified_weak), ds)));
-
- playlist_connections.push_back (ds->playlist()->RegionAdded.connect (
- sigc::mem_fun (*this, &StreamView::add_region_view_weak)));
-
- playlist_connections.push_back (ds->playlist()->RegionRemoved.connect (
- sigc::mem_fun (*this, &StreamView::remove_region_view)));
+ playlist_connections.add_connection (ds->playlist()->Modified.connect (boost::bind (&StreamView::playlist_modified_weak, this, ds)));
+ playlist_connections.add_connection (ds->playlist()->RegionAdded.connect (boost::bind (&StreamView::add_region_view_weak, this, _1)));
+ playlist_connections.add_connection (ds->playlist()->RegionRemoved.connect (boost::bind (&StreamView::remove_region_view, this, _1)));
}
void
diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h
index 3b715ff099..0fe0b1a9ed 100644
--- a/gtk2_ardour/streamview.h
+++ b/gtk2_ardour/streamview.h
@@ -22,6 +22,8 @@
#include <list>
#include <cmath>
+#include "pbd/scoped_connections.h"
+
#include "ardour/location.h"
#include "enums.h"
#include "simplerect.h"
@@ -53,7 +55,7 @@ class RegionSelection;
class CrossfadeView;
class Selection;
-class StreamView : public sigc::trackable
+class StreamView : public sigc::trackable, public PBD::ScopedConnectionList
{
public:
virtual ~StreamView ();
@@ -158,16 +160,16 @@ protected:
Gdk::Color region_color; ///< Contained region color
uint32_t stream_base_color; ///< Background color
- std::vector<sigc::connection> playlist_connections;
- sigc::connection playlist_change_connection;
+ PBD::ScopedConnectionList playlist_connections;
+ boost::signals2::scoped_connection playlist_change_connection;
ARDOUR::layer_t _layers;
LayerDisplay _layer_display;
double height;
- std::list<sigc::connection> rec_data_ready_connections;
- nframes_t last_rec_data_frame;
+ PBD::ScopedConnectionList rec_data_ready_connections;
+ nframes_t last_rec_data_frame;
private:
void update_coverage_frames ();
diff --git a/gtk2_ardour/strip_silence_dialog.cc b/gtk2_ardour/strip_silence_dialog.cc
index 6872e16455..ab1297d6bc 100644
--- a/gtk2_ardour/strip_silence_dialog.cc
+++ b/gtk2_ardour/strip_silence_dialog.cc
@@ -129,7 +129,7 @@ StripSilenceDialog::create_waves ()
int n = 0;
for (std::list<Wave>::iterator i = _waves.begin(); i != _waves.end(); ++i) {
- if (i->region->audio_source(0)->peaks_ready (sigc::mem_fun (*this, &StripSilenceDialog::peaks_ready), _peaks_ready_connection)) {
+ if (i->region->audio_source(0)->peaks_ready (boost::bind (&StripSilenceDialog::peaks_ready, this), _peaks_ready_connection)) {
i->view = new WaveView (*(_canvas->root()));
i->view->property_data_src() = static_cast<gpointer>(i->region.get());
i->view->property_cache() = WaveView::create_cache ();
diff --git a/gtk2_ardour/strip_silence_dialog.h b/gtk2_ardour/strip_silence_dialog.h
index b7f776b537..f79abb8eb9 100644
--- a/gtk2_ardour/strip_silence_dialog.h
+++ b/gtk2_ardour/strip_silence_dialog.h
@@ -66,5 +66,5 @@ private:
int _wave_width;
int _wave_height;
- sigc::connection _peaks_ready_connection;
+ boost::signals2::scoped_connection _peaks_ready_connection;
};
diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc
index b8d7b3b9e0..e1368dc5f3 100644
--- a/gtk2_ardour/time_axis_view.cc
+++ b/gtk2_ardour/time_axis_view.cc
@@ -74,7 +74,7 @@ uint32_t TimeAxisView::hSmall = 0;
bool TimeAxisView::need_size_info = true;
int const TimeAxisView::_max_order = 512;
-TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisView* rent, Canvas& /*canvas*/)
+TimeAxisView::TimeAxisView (ARDOUR::Session* sess, PublicEditor& ed, TimeAxisView* rent, Canvas& /*canvas*/)
: AxisView (sess),
controls_table (2, 8),
_y_position (0),
@@ -924,7 +924,7 @@ TimeAxisView::add_ghost (RegionView* rv)
if(gr) {
ghosts.push_back(gr);
- gr->GoingAway.connect (sigc::mem_fun(*this, &TimeAxisView::erase_ghost));
+ scoped_connect (gr->GoingAway, boost::bind (&TimeAxisView::erase_ghost, this, _1));
}
}
diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h
index e8860cb907..67aaa0d327 100644
--- a/gtk2_ardour/time_axis_view.h
+++ b/gtk2_ardour/time_axis_view.h
@@ -34,6 +34,7 @@
#include <gtkmm2ext/focus_entry.h>
#include "pbd/stateful.h"
+#include "pbd/scoped_connections.h"
#include "ardour/types.h"
#include "ardour/region.h"
@@ -89,7 +90,7 @@ class TimeAxisView : public virtual AxisView, public PBD::Stateful
static uint32_t hSmaller;
static uint32_t hSmall;
- TimeAxisView(ARDOUR::Session& sess, PublicEditor& ed, TimeAxisView* parent, ArdourCanvas::Canvas& canvas);
+ TimeAxisView(ARDOUR::Session* sess, PublicEditor& ed, TimeAxisView* parent, ArdourCanvas::Canvas& canvas);
virtual ~TimeAxisView ();
XMLNode& get_state ();
diff --git a/gtk2_ardour/time_axis_view_item.h b/gtk2_ardour/time_axis_view_item.h
index de8d3792db..1dd16043ad 100644
--- a/gtk2_ardour/time_axis_view_item.h
+++ b/gtk2_ardour/time_axis_view_item.h
@@ -25,6 +25,8 @@
#include <libgnomecanvasmm/pixbuf.h>
+#include "pbd/scoped_connections.h"
+
#include "selectable.h"
#include "simplerect.h"
#include "canvas.h"
@@ -35,7 +37,7 @@ class TimeAxisView;
* A base class for 'items' that may appear upon a TimeAxisView
*
*/
-class TimeAxisViewItem : public Selectable
+class TimeAxisViewItem : public Selectable, public PBD::ScopedConnectionList
{
public:
virtual ~TimeAxisViewItem() ;
diff --git a/gtk2_ardour/visual_time_axis.cc b/gtk2_ardour/visual_time_axis.cc
index 1e83f56dc9..b4b613042b 100644
--- a/gtk2_ardour/visual_time_axis.cc
+++ b/gtk2_ardour/visual_time_axis.cc
@@ -65,7 +65,7 @@ using namespace Gtk;
* @param sess the current session
* @param canvas the parent canvas object
*/
-VisualTimeAxis::VisualTimeAxis(const string & name, PublicEditor& ed, ARDOUR::Session& sess, Canvas& canvas)
+VisualTimeAxis::VisualTimeAxis(const string & name, PublicEditor& ed, ARDOUR::Session* sess, Canvas& canvas)
: AxisView(sess),
TimeAxisView(sess,ed,(TimeAxisView*) 0, canvas),
visual_button (_("v")),
diff --git a/gtk2_ardour/visual_time_axis.h b/gtk2_ardour/visual_time_axis.h
index f728a1f4cf..9bc98fc345 100644
--- a/gtk2_ardour/visual_time_axis.h
+++ b/gtk2_ardour/visual_time_axis.h
@@ -145,7 +145,7 @@ class VisualTimeAxis : public TimeAxisView
* @param sess the current session
* @param canvas the parent canvas object
*/
- VisualTimeAxis(const std::string & name, PublicEditor& ed, ARDOUR::Session& sess, ArdourCanvas::Canvas& canvas) ;
+ VisualTimeAxis(const std::string & name, PublicEditor& ed, ARDOUR::Session* sess, ArdourCanvas::Canvas& canvas) ;
//---------------------------------------------------------------------------------------//