summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-01-13 15:13:37 +0100
committerRobin Gareus <robin@gareus.org>2014-01-13 15:13:37 +0100
commit291618fe7116424448da5f7029e567d655526521 (patch)
treee8399ce25f46634a7a75670e8c97ac3747f99002 /gtk2_ardour
parent9c595f8131967541808ae77bae842bd905db9caa (diff)
allow to custom select panner-type for each delivery.
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/mixer_strip.cc29
-rw-r--r--gtk2_ardour/panner_ui.cc9
-rw-r--r--gtk2_ardour/panner_ui.h4
-rw-r--r--gtk2_ardour/send_ui.cc12
4 files changed, 25 insertions, 29 deletions
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc
index 780e8078c6..830d2bf161 100644
--- a/gtk2_ardour/mixer_strip.cc
+++ b/gtk2_ardour/mixer_strip.cc
@@ -1041,29 +1041,13 @@ MixerStrip::update_panner_choices ()
ENSURE_GUI_THREAD (*this, &MixerStrip::update_panner_choices)
if (!_route->panner_shell()) { return; }
- int in = _route->output()->n_ports().n_audio();
- int out = in;
-
+ uint32_t in = _route->output()->n_ports().n_audio();
+ uint32_t out = in;
if (_route->panner()) {
in = _route->panner()->in().n_audio();
}
- if (out < 2 || in == 0) {
- panners.set_available_panners(_route, std::map<std::string,std::string>());
- return;
- }
-
- std::map<std::string,std::string> panner_list;
- std::list<PannerInfo*> panner_info = PannerManager::instance().panner_info;
- /* get available panners for current configuration. */
- for (list<PannerInfo*>::iterator p = panner_info.begin(); p != panner_info.end(); ++p) {
- PanPluginDescriptor* d = &(*p)->descriptor;
- if (d->in != -1 && d->in != in) continue;
- if (d->out != -1 && d->out != out) continue;
- if (d->in == -1 && d->out == -1 && out <= 2) continue;
- panner_list.insert(std::pair<std::string,std::string>(d->panner_uri,d->name));
- }
- panners.set_available_panners(_route, panner_list);
+ panners.set_available_panners(PannerManager::instance().PannerManager::get_available_panners(in, out));
}
/*
@@ -1891,10 +1875,13 @@ MixerStrip::show_send (boost::shared_ptr<Send> send)
gain_meter().set_controls (_route, send->meter(), send->amp());
gain_meter().setup_meters ();
+ uint32_t const in = _current_delivery->pans_required();
+ uint32_t const out = _current_delivery->pan_outs();
+
panner_ui().set_panner (_current_delivery->panner_shell(), _current_delivery->panner());
- panner_ui().set_available_panners(boost::shared_ptr<ARDOUR::Route>(), std::map<std::string,std::string>());
+ panner_ui().set_available_panners(PannerManager::instance().PannerManager::get_available_panners(in, out));
panner_ui().setup_pan ();
- panners.show_all ();
+ panner_ui().show_all ();
input_button.set_sensitive (false);
group_button.set_sensitive (false);
diff --git a/gtk2_ardour/panner_ui.cc b/gtk2_ardour/panner_ui.cc
index ab4279a154..2a6568992b 100644
--- a/gtk2_ardour/panner_ui.cc
+++ b/gtk2_ardour/panner_ui.cc
@@ -388,7 +388,7 @@ PannerUI::build_pan_menu ()
items.push_back (MenuElem (_("Edit..."), sigc::mem_fun (*this, &PannerUI::pan_edit)));
}
- if (_route && _panner_list.size() > 1 && !_panshell->bypassed()) {
+ if (_panner_list.size() > 1 && !_panshell->bypassed()) {
RadioMenuItem::Group group;
items.push_back (SeparatorElem());
@@ -444,9 +444,7 @@ PannerUI::pan_reset ()
void
PannerUI::pan_set_custom_type (std::string uri) {
if (_suspend_menu_callbacks) return;
- if (_route) {
- _route->set_custom_panner_uri(uri);
- }
+ _panshell->select_panner_by_uri(uri);
}
void
@@ -644,8 +642,7 @@ PannerUI::position_adjusted ()
}
void
-PannerUI::set_available_panners(boost::shared_ptr<ARDOUR::Route> r, std::map<std::string,std::string> p)
+PannerUI::set_available_panners(std::map<std::string,std::string> p)
{
- _route = r;
_panner_list = p;
}
diff --git a/gtk2_ardour/panner_ui.h b/gtk2_ardour/panner_ui.h
index dca24451d1..9b349d664f 100644
--- a/gtk2_ardour/panner_ui.h
+++ b/gtk2_ardour/panner_ui.h
@@ -73,7 +73,7 @@ class PannerUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr
void set_width (Width);
void setup_pan ();
- void set_available_panners(boost::shared_ptr<ARDOUR::Route>, std::map<std::string,std::string>);
+ void set_available_panners(std::map<std::string,std::string>);
void effective_pan_display ();
@@ -85,6 +85,7 @@ class PannerUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr
private:
friend class MixerStrip;
+ friend class SendUI;
boost::shared_ptr<ARDOUR::PannerShell> _panshell;
boost::shared_ptr<ARDOUR::Panner> _panner;
@@ -161,7 +162,6 @@ class PannerUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr
void start_touch (boost::weak_ptr<ARDOUR::AutomationControl>);
void stop_touch (boost::weak_ptr<ARDOUR::AutomationControl>);
- boost::shared_ptr<ARDOUR::Route> _route;
std::map<std::string,std::string> _panner_list;
bool _suspend_menu_callbacks;
};
diff --git a/gtk2_ardour/send_ui.cc b/gtk2_ardour/send_ui.cc
index 90ee52b3ad..cdd8673da9 100644
--- a/gtk2_ardour/send_ui.cc
+++ b/gtk2_ardour/send_ui.cc
@@ -20,6 +20,7 @@
#include <gtkmm2ext/doi.h>
#include "ardour/io.h"
+#include "ardour/panner_manager.h"
#include "ardour/send.h"
#include "ardour/rc_configuration.h"
@@ -70,7 +71,11 @@ SendUI::SendUI (Gtk::Window* parent, boost::shared_ptr<Send> s, Session* session
_send->output()->changed.connect (connections, invalidator (*this), boost::bind (&SendUI::outs_changed, this, _1, _2), gui_context());
+ uint32_t const in = _send->pans_required();
+ uint32_t const out = _send->pan_outs();
+
_panners.set_width (Wide);
+ _panners.set_available_panners(PannerManager::instance().PannerManager::get_available_panners(in, out));
_panners.setup_pan ();
_gpm.setup_meters ();
@@ -97,7 +102,14 @@ SendUI::outs_changed (IOChange change, void* /*ignored*/)
{
ENSURE_GUI_THREAD (*this, &SendUI::outs_changed, change, ignored)
if (change.type & IOChange::ConfigurationChanged) {
+ uint32_t const in = _send->pans_required();
+ uint32_t const out = _send->pan_outs();
+ if (_panners._panner == 0) {
+ _panners.set_panner (_send->panner_shell(), _send->panner());
+ }
+ _panners.set_available_panners(PannerManager::instance().PannerManager::get_available_panners(in, out));
_panners.setup_pan ();
+ _panners.show_all ();
_gpm.setup_meters ();
}
}