#include "ardour/location.h"
#include "ardour/pannable.h"
#include "ardour/panner.h"
+#include "ardour/panner_shell.h"
#include "ardour/playlist.h"
#include "ardour/processor.h"
#include "ardour/profile.h"
}
if (_route->panner()) {
- _route->panner()->Changed.connect (*this, invalidator (*this),
- boost::bind (&AudioTimeAxisView::ensure_pan_views, this, false), gui_context());
+ _route->panner_shell()->Changed.connect (*this, invalidator (*this),
+ boost::bind (&AudioTimeAxisView::ensure_pan_views, this, false), gui_context());
}
/* map current state of the route */
#include "ardour/audio_track.h"
#include "ardour/pannable.h"
#include "ardour/panner.h"
+#include "ardour/panner_shell.h"
#include "ardour/send.h"
#include "ardour/processor.h"
#include "ardour/profile.h"
_route->route_group_changed.connect (route_connections, invalidator (*this), boost::bind (&MixerStrip::route_group_changed, this), gui_context());
if (_route->panner()) {
- _route->panner()->Changed.connect (route_connections, invalidator (*this), boost::bind (&MixerStrip::connect_to_pan, this), gui_context());
+ _route->panner_shell()->Changed.connect (route_connections, invalidator (*this), boost::bind (&MixerStrip::connect_to_pan, this), gui_context());
}
if (is_audio_track()) {
route_group_changed ();
connect_to_pan ();
-
panners.setup_pan ();
update_diskstream_display ();
p->automation_state_changed.connect (panstate_connection, invalidator (*this), boost::bind (&PannerUI::pan_automation_state_changed, &panners), gui_context());
p->automation_style_changed.connect (panstyle_connection, invalidator (*this), boost::bind (&PannerUI::pan_automation_style_changed, &panners), gui_context());
- panners.panner_changed (this);
+ panners.panshell_changed ();
}
gain_meter().set_controls (_route, send->meter(), send->amp());
gain_meter().setup_meters ();
- panner_ui().set_panner (_current_delivery->panner());
+ panner_ui().set_panner (_current_delivery->panner_shell(), _current_delivery->panner());
panner_ui().setup_pan ();
input_button.set_sensitive (false);
gain_meter().set_controls (_route, _route->shared_peak_meter(), _route->amp());
gain_meter().setup_meters ();
- panner_ui().set_panner (_route->main_outs()->panner());
+ panner_ui().set_panner (_route->main_outs()->panner_shell(), _route->main_outs()->panner());
panner_ui().setup_pan ();
reset_strip_style ();
: panner (p), width (0), height (h)
{
panner->StateChanged.connect (connections, invalidator (*this), boost::bind (&Panner2d::handle_state_change, this), gui_context());
- panner->Changed.connect (connections, invalidator (*this), boost::bind (&Panner2d::handle_position_change, this), gui_context());
panner->pannable()->pan_azimuth_control->Changed.connect (connections, invalidator(*this), boost::bind (&Panner2d::handle_position_change, this), gui_context());
panner->pannable()->pan_width_control->Changed.connect (connections, invalidator(*this), boost::bind (&Panner2d::handle_position_change, this), gui_context());
#include "ardour/session.h"
#include "ardour/panner.h"
#include "ardour/pannable.h"
+#include "ardour/panner_shell.h"
#include "ardour/route.h"
#include "i18n.h"
}
void
-PannerUI::set_panner (boost::shared_ptr<Panner> p)
+PannerUI::set_panner (boost::shared_ptr<PannerShell> ps, boost::shared_ptr<Panner> p)
{
+ /* note that the panshell might not change here (i.e. ps == _panshell)
+ */
+
connections.drop_connections ();
delete pan_astyle_menu;
delete pan_astate_menu;
pan_astate_menu = 0;
+ _panshell = ps;
_panner = p;
delete twod_panner;
return;
}
- _panner->Changed.connect (connections, invalidator (*this), boost::bind (&PannerUI::panner_changed, this, this), gui_context());
+ _panshell->Changed.connect (connections, invalidator (*this), boost::bind (&PannerUI::panshell_changed, this), gui_context());
_panner->StateChanged.connect (connections, invalidator (*this), boost::bind (&PannerUI::update_pan_state, this), gui_context());
/* new panner object, force complete reset of panner GUI
_current_nouts = 0;
_current_nins = 0;
- panner_changed (0);
+ setup_pan ();
update_pan_sensitive ();
pan_automation_state_changed ();
-
}
void
void
-PannerUI::panner_changed (void* src)
+PannerUI::panshell_changed ()
{
+ set_panner (_panshell, _panshell->panner());
setup_pan ();
}
return;
}
+ _current_nins = nins;
+ _current_nouts = nouts;
+
container_clear (pan_vbox);
delete twod_panner;
twod_panner = 0;
delete _stereo_panner;
_stereo_panner = 0;
-
+
if (nouts == 0 || nouts == 1) {
delete _stereo_panner;
namespace ARDOUR {
class Session;
class Panner;
+ class PannerShell;
class Delivery;
class AutomationControl;
}
PannerUI (ARDOUR::Session*);
~PannerUI ();
- virtual void set_panner (boost::shared_ptr<ARDOUR::Panner>);
+ virtual void set_panner (boost::shared_ptr<ARDOUR::PannerShell>, boost::shared_ptr<ARDOUR::Panner>);
- void panner_changed (void *);
+ void panshell_changed ();
void update_pan_sensitive ();
void update_gain_sensitive ();
private:
friend class MixerStrip;
+ boost::shared_ptr<ARDOUR::PannerShell> _panshell;
boost::shared_ptr<ARDOUR::Panner> _panner;
PBD::ScopedConnectionList connections;
PBD::ScopedConnectionList _pan_control_connections;
{
assert (_send);
- _panners.set_panner (s->panner());
+ _panners.set_panner (s->panner_shell(), s->panner());
_gpm.set_controls (boost::shared_ptr<Route>(), s->meter(), s->amp());
_hbox.pack_start (_gpm, true, true);
framepos_t start, framepos_t end, pframes_t nframes,
pan_t** buffers);
- PBD::Signal0<void> Changed; /* for positional info */
- PBD::Signal0<void> StateChanged; /* for mute */
+ PBD::Signal0<void> StateChanged;
int set_state (const XMLNode&, int version);
virtual XMLNode& state (bool full_state) = 0;
the config hasn't changed, we're done.
*/
- cerr << "PShell: reconfigure for in = " << in << " out = " << out;
- if (_panner) {
- cerr << " current panner = " << _panner->in() << " and " << _panner->out();
- }
- cerr << endl;
-
- if (_panner && _panner->in().n_audio() == nins && _panner->out().n_audio() == nouts) {
+ if (_panner && (_panner->in().n_audio() == nins) && (_panner->out().n_audio() == nouts)) {
return;
}
speakers.reset (s);
}
- cerr << "Creating a new panner\n";
Panner* p = pi->descriptor.factory (_pannable, speakers);
boost_debug_shared_ptr_mark_interesting (p, "Panner");
_panner.reset (p);
#include "ardour/route.h"
#include "ardour/track.h"
#include "ardour/midi_ui.h"
-#include "ardour/panner.h"
+#include "ardour/pannable.h"
#include "ardour/session_object.h" // for Properties::name
#include "mackie_control_protocol.h"
_route->PropertyChanged.connect (connections, MISSING_INVALIDATOR, ui_bind (&MackieControlProtocol::notify_property_changed, &_mcp, _1, this), midi_ui_context());
- if (_route->panner()) {
- _route->panner()->Changed.connect(connections, MISSING_INVALIDATOR, ui_bind (&MackieControlProtocol::notify_panner_changed, &_mcp, this, false), midi_ui_context());
+ if (_route->pannable()) {
+ _route->pannable()->pan_azimuth_control->Changed.connect(connections, MISSING_INVALIDATOR, ui_bind (&MackieControlProtocol::notify_panner_changed, &_mcp, this, false), midi_ui_context());
+ _route->pannable()->pan_width_control->Changed.connect(connections, MISSING_INVALIDATOR, ui_bind (&MackieControlProtocol::notify_panner_changed, &_mcp, this, false), midi_ui_context());
}
boost::shared_ptr<Track> trk = boost::dynamic_pointer_cast<ARDOUR::Track>(_route);