X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fsend_ui.cc;h=1014f5a07a9e977da1d060606016d3b91773eff4;hb=a99ea55e6858107ae196440aefdb98785fc58a68;hp=ed5a6c9e111db73d6a31ebe8209d1918e17246ab;hpb=d38e2213d79b1c8952c776a3b60f7709457edc0c;p=ardour.git diff --git a/gtk2_ardour/send_ui.cc b/gtk2_ardour/send_ui.cc index ed5a6c9e11..1014f5a07a 100644 --- a/gtk2_ardour/send_ui.cc +++ b/gtk2_ardour/send_ui.cc @@ -15,12 +15,13 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ -#include #include +#include "ardour/io.h" +#include "ardour/send.h" + #include "utils.h" #include "send_ui.h" #include "io_selector.h" @@ -28,13 +29,17 @@ #include "gui_thread.h" using namespace ARDOUR; +using namespace PBD; -SendUI::SendUI (Send& s, Session& se) - : _send (s), - _session (se), - gpm (s, se), - panners (s, se) +SendUI::SendUI (boost::shared_ptr s, Session& se) + : _send (s) + , _session (se) + , gpm (se) + , panners (se) { + panners.set_io (s->io()); + gpm.set_io (s->io()); + hbox.pack_start (gpm, true, true); set_name ("SendUIFrame"); @@ -44,7 +49,7 @@ SendUI::SendUI (Send& s, Session& se) vbox.pack_start (hbox, false, false, false); vbox.pack_start (panners, false,false); - io = new IOSelector (se, s, false); + io = manage (new IOSelector (se, s->io(), true)); pack_start (vbox, false, false); @@ -52,10 +57,10 @@ SendUI::SendUI (Send& s, Session& se) show_all (); - _send.set_metering (true); + _send->set_metering (true); - _send.output_changed.connect (mem_fun (*this, &SendUI::ins_changed)); - _send.output_changed.connect (mem_fun (*this, &SendUI::outs_changed)); + _send->io()->input_changed.connect (mem_fun (*this, &SendUI::ins_changed)); + _send->io()->output_changed.connect (mem_fun (*this, &SendUI::outs_changed)); panners.set_width (Wide); panners.setup_pan (); @@ -63,14 +68,14 @@ SendUI::SendUI (Send& s, Session& se) gpm.setup_meters (); gpm.set_fader_name ("SendUIFrame"); - screen_update_connection = ARDOUR_UI::instance()->RapidScreenUpdate.connect (mem_fun (*this, &SendUI::update)); + // screen_update_connection = ARDOUR_UI::instance()->RapidScreenUpdate.connect (mem_fun (*this, &SendUI::update)); fast_screen_update_connection = ARDOUR_UI::instance()->SuperRapidScreenUpdate.connect (mem_fun (*this, &SendUI::fast_update)); } SendUI::~SendUI () { - _send.set_metering (false); - + _send->set_metering (false); + /* XXX not clear that we need to do this */ screen_update_connection.disconnect(); @@ -96,45 +101,34 @@ SendUI::outs_changed (IOChange change, void* ignored) } } -void -SendUI::send_going_away (Redirect *ignored) -{ - ENSURE_GUI_THREAD (bind (mem_fun (*this, &SendUI::send_going_away), ignored)); - - delete this; -} - void SendUI::update () { - gpm.update_meters (); } void SendUI::fast_update () { - if (_session.meter_falloff() > 0.0f) { - gpm.update_meters_falloff (); + if (Config->get_meter_falloff() > 0.0f) { + gpm.update_meters (); } } -SendUIWindow::SendUIWindow (Send& s, Session& ss) +SendUIWindow::SendUIWindow (boost::shared_ptr s, Session& ss) + : ArdourDialog (string("Ardour: send ") + s->name()) { ui = new SendUI (s, ss); - vpacker.set_border_width (5); - hpacker.pack_start (*ui, true, true); - vpacker.pack_start (hpacker); + get_vbox()->set_border_width (5); + get_vbox()->pack_start (hpacker); - add (vpacker); set_name ("SendUIWindow"); + + going_away_connection = s->GoingAway.connect (mem_fun (*this, &SendUIWindow::send_going_away)); - s.GoingAway.connect (mem_fun (*this, &SendUIWindow::send_going_away)); - - delete_event.connect (bind (ptr_fun (just_hide_it), reinterpret_cast (this))); - + signal_delete_event().connect (bind (ptr_fun (just_hide_it), reinterpret_cast (this))); } SendUIWindow::~SendUIWindow () @@ -143,10 +137,10 @@ SendUIWindow::~SendUIWindow () } void -SendUIWindow::send_going_away (Redirect *ignored) +SendUIWindow::send_going_away () { - ENSURE_GUI_THREAD(bind (mem_fun (*this, &SendUIWindow::send_going_away), ignored)); - - delete this; + ENSURE_GUI_THREAD (mem_fun (*this, &SendUIWindow::send_going_away)); + delete_when_idle (this); + going_away_connection.disconnect (); }