summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-01-02 04:58:23 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2016-01-02 04:58:30 -0500
commit9e3299f97da874a48f67dc5ff0e0f87a6a54768a (patch)
tree460d8bd46c20c72fbaac2ea917da32bb95d42124 /gtk2_ardour
parent38f199e35565e58d48f68eafa3e5873d9787c55c (diff)
change Controllable::set_value() API to include grouped control consideration.
This also removes Route::group_gain_control() and associated machinery. Not yet tested with Mackie or other surfaces. More work to done to start using the group capabilities, and also potentially to add or derive more controls as RouteAutomationControls
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour_knob.cc6
-rw-r--r--gtk2_ardour/ardour_ui.cc2
-rw-r--r--gtk2_ardour/ardour_ui.h2
-rw-r--r--gtk2_ardour/automation_controller.cc10
-rw-r--r--gtk2_ardour/generic_pluginui.cc4
-rw-r--r--gtk2_ardour/lv2_plugin_ui.cc2
-rw-r--r--gtk2_ardour/mono_panner.cc24
-rw-r--r--gtk2_ardour/mono_panner_editor.cc6
-rw-r--r--gtk2_ardour/processor_box.cc4
-rw-r--r--gtk2_ardour/shuttle_control.cc2
-rw-r--r--gtk2_ardour/shuttle_control.h2
-rw-r--r--gtk2_ardour/stereo_panner.cc60
-rw-r--r--gtk2_ardour/stereo_panner_editor.cc6
13 files changed, 70 insertions, 60 deletions
diff --git a/gtk2_ardour/ardour_knob.cc b/gtk2_ardour/ardour_knob.cc
index f7e4a939f2..8cea0f4a4d 100644
--- a/gtk2_ardour/ardour_knob.cc
+++ b/gtk2_ardour/ardour_knob.cc
@@ -365,14 +365,14 @@ ArdourKnob::on_motion_notify_event (GdkEventMotion *ev)
delta = tozero + remain;
_dead_zone_delta = 0;
} else {
- c->set_value (c->normal());
+ c->set_value (c->normal(), Controllable::NoGroup);
_dead_zone_delta = remain / px_deadzone;
return true;
}
}
if (fabsf (rintf((val - _normal) / scale) + _dead_zone_delta) < 1) {
- c->set_value (c->normal());
+ c->set_value (c->normal(), Controllable::NoGroup);
_dead_zone_delta += delta / px_deadzone;
return true;
}
@@ -430,7 +430,7 @@ ArdourKnob::on_button_release_event (GdkEventButton *ev)
if ( (_grabbed_y == ev->y && _grabbed_x == ev->x) && Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) { //no move, shift-click sets to default
boost::shared_ptr<PBD::Controllable> c = binding_proxy.get_controllable();
if (!c) return false;
- c->set_value (c->normal());
+ c->set_value (c->normal(), Controllable::NoGroup);
return true;
}
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 665da7dcf1..3efd815951 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -4687,7 +4687,7 @@ ARDOUR_UI::TransportControllable::TransportControllable (std::string name, ARDOU
}
void
-ARDOUR_UI::TransportControllable::set_value (double val)
+ARDOUR_UI::TransportControllable::set_value (double val, PBD::Controllable::GroupControlDisposition /*group_override*/)
{
if (val < 0.5) {
/* do nothing: these are radio-style actions */
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index cc800a2e2f..d08dd9aeef 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -430,7 +430,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
};
TransportControllable (std::string name, ARDOUR_UI&, ToggleType);
- void set_value (double);
+ void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
double get_value (void) const;
ARDOUR_UI& ui;
diff --git a/gtk2_ardour/automation_controller.cc b/gtk2_ardour/automation_controller.cc
index dd2d71d9cd..3ae1b2184f 100644
--- a/gtk2_ardour/automation_controller.cc
+++ b/gtk2_ardour/automation_controller.cc
@@ -40,6 +40,8 @@
using namespace ARDOUR;
using namespace Gtk;
+using PBD::Controllable;
+
AutomationBarController::AutomationBarController (
boost::shared_ptr<Automatable> printer,
boost::shared_ptr<AutomationControl> ac,
@@ -153,7 +155,7 @@ void
AutomationController::value_adjusted ()
{
if (!_ignore_change) {
- _controllable->set_value (_controllable->interface_to_internal(_adjustment->get_value()));
+ _controllable->set_value (_controllable->interface_to_internal(_adjustment->get_value()), Controllable::NoGroup);
}
/* A bar controller will automatically follow the adjustment, but for a
@@ -248,7 +250,7 @@ AutomationController::run_note_select_dialog()
const double value = ((_controllable->desc().unit == ARDOUR::ParameterDescriptor::HZ)
? midi_note_to_hz(dialog->note_number())
: dialog->note_number());
- _controllable->set_value(clamp(value, desc.lower, desc.upper));
+ _controllable->set_value(clamp(value, desc.lower, desc.upper), Controllable::NoGroup);
}
delete dialog;
}
@@ -263,7 +265,7 @@ AutomationController::set_freq_beats(double beats)
const double bpm = tempo.beats_per_minute();
const double bps = bpm / 60.0;
const double freq = bps / beats;
- _controllable->set_value(clamp(freq, desc.lower, desc.upper));
+ _controllable->set_value(clamp(freq, desc.lower, desc.upper), Controllable::NoGroup);
}
void
@@ -271,7 +273,7 @@ AutomationController::set_ratio(double ratio)
{
const ARDOUR::ParameterDescriptor& desc = _controllable->desc();
const double value = _controllable->get_value() * ratio;
- _controllable->set_value(clamp(value, desc.lower, desc.upper));
+ _controllable->set_value(clamp(value, desc.lower, desc.upper), Controllable::NoGroup);
}
bool
diff --git a/gtk2_ardour/generic_pluginui.cc b/gtk2_ardour/generic_pluginui.cc
index 47b5f93a98..ef2de43309 100644
--- a/gtk2_ardour/generic_pluginui.cc
+++ b/gtk2_ardour/generic_pluginui.cc
@@ -923,7 +923,7 @@ GenericPluginUI::control_port_toggled (ControlUI* cui)
} else {
cui->button->set_name ("PluginEditorButton");
}
- insert->automation_control (cui->parameter())->set_value (active);
+ insert->automation_control (cui->parameter())->set_value (active, Controllable::NoGroup);
cui->ignore_change--;
}
@@ -932,7 +932,7 @@ GenericPluginUI::control_combo_changed (ControlUI* cui)
{
if (!cui->ignore_change && cui->scale_points) {
string value = cui->combo->get_active_text();
- insert->automation_control (cui->parameter())->set_value ((*cui->scale_points)[value]);
+ insert->automation_control (cui->parameter())->set_value ((*cui->scale_points)[value], Controllable::NoGroup);
}
}
diff --git a/gtk2_ardour/lv2_plugin_ui.cc b/gtk2_ardour/lv2_plugin_ui.cc
index 20f59b5e83..fe6b3c70bd 100644
--- a/gtk2_ardour/lv2_plugin_ui.cc
+++ b/gtk2_ardour/lv2_plugin_ui.cc
@@ -59,7 +59,7 @@ LV2PluginUI::write_from_ui(void* controller,
me->_updates.insert (port_index);
if (ac) {
- ac->set_value(*(const float*)buffer);
+ ac->set_value(*(const float*)buffer, Controllable::NoGroup);
}
} else if (format == URIMap::instance().urids.atom_eventTransfer) {
diff --git a/gtk2_ardour/mono_panner.cc b/gtk2_ardour/mono_panner.cc
index 23b64eee28..0dd54ef6ac 100644
--- a/gtk2_ardour/mono_panner.cc
+++ b/gtk2_ardour/mono_panner.cc
@@ -51,6 +51,8 @@ using namespace Gtk;
using namespace Gtkmm2ext;
using namespace ARDOUR_UI_UTILS;
+using PBD::Controllable;
+
MonoPanner::ColorScheme MonoPanner::colors;
bool MonoPanner::have_colors = false;
@@ -318,11 +320,11 @@ MonoPanner::on_button_press_event (GdkEventButton* ev)
if (ev->x <= width/3) {
/* left side dbl click */
- position_control->set_value (0);
+ position_control->set_value (0, Controllable::NoGroup);
} else if (ev->x > 2*width/3) {
- position_control->set_value (1.0);
+ position_control->set_value (1.0, Controllable::NoGroup);
} else {
- position_control->set_value (0.5);
+ position_control->set_value (0.5, Controllable::NoGroup);
}
_dragging = false;
@@ -393,12 +395,12 @@ MonoPanner::on_scroll_event (GdkEventScroll* ev)
case GDK_SCROLL_UP:
case GDK_SCROLL_LEFT:
pv -= step;
- position_control->set_value (pv);
+ position_control->set_value (pv, Controllable::NoGroup);
break;
case GDK_SCROLL_DOWN:
case GDK_SCROLL_RIGHT:
pv += step;
- position_control->set_value (pv);
+ position_control->set_value (pv, Controllable::NoGroup);
break;
}
@@ -423,7 +425,7 @@ MonoPanner::on_motion_notify_event (GdkEventMotion* ev)
if (!detented && ARDOUR::Panner::equivalent (position_control->get_value(), 0.5)) {
detented = true;
/* snap to center */
- position_control->set_value (0.5);
+ position_control->set_value (0.5, Controllable::NoGroup);
}
if (detented) {
@@ -432,13 +434,13 @@ MonoPanner::on_motion_notify_event (GdkEventMotion* ev)
/* have we pulled far enough to escape ? */
if (fabs (accumulated_delta) >= 0.025) {
- position_control->set_value (position_control->get_value() + accumulated_delta);
+ position_control->set_value (position_control->get_value() + accumulated_delta, Controllable::NoGroup);
detented = false;
accumulated_delta = false;
}
} else {
double pv = position_control->get_value(); // 0..1.0 ; 0 = left
- position_control->set_value (pv + delta);
+ position_control->set_value (pv + delta, Controllable::NoGroup);
}
last_drag_x = ev->x;
@@ -465,15 +467,15 @@ MonoPanner::on_key_press_event (GdkEventKey* ev)
switch (ev->keyval) {
case GDK_Left:
pv -= step;
- position_control->set_value (pv);
+ position_control->set_value (pv, Controllable::NoGroup);
break;
case GDK_Right:
pv += step;
- position_control->set_value (pv);
+ position_control->set_value (pv, Controllable::NoGroup);
break;
case GDK_0:
case GDK_KP_0:
- position_control->set_value (0.0);
+ position_control->set_value (0.0, Controllable::NoGroup);
break;
default:
return false;
diff --git a/gtk2_ardour/mono_panner_editor.cc b/gtk2_ardour/mono_panner_editor.cc
index 134c812822..5a9a0927c5 100644
--- a/gtk2_ardour/mono_panner_editor.cc
+++ b/gtk2_ardour/mono_panner_editor.cc
@@ -29,6 +29,8 @@
using namespace Gtk;
using namespace Gtkmm2ext;
+using PBD::Controllable;
+
MonoPannerEditor::MonoPannerEditor (MonoPanner* p)
: PannerEditor (_("Mono Panner"))
, _panner (p)
@@ -98,7 +100,7 @@ MonoPannerEditor::left_changed ()
_ignore_changes = true;
_right.set_value (100 * v);
- _panner->get_controllable()->set_value (v);
+ _panner->get_controllable()->set_value (v, Controllable::NoGroup);
_ignore_changes = false;
}
@@ -113,7 +115,7 @@ MonoPannerEditor::right_changed ()
_ignore_changes = true;
_left.set_value (100 * (1 - v));
- _panner->get_controllable()->set_value (v);
+ _panner->get_controllable()->set_value (v, Controllable::NoGroup);
_ignore_changes = false;
}
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc
index d1de736e57..29e230920c 100644
--- a/gtk2_ardour/processor_box.cc
+++ b/gtk2_ardour/processor_box.cc
@@ -711,7 +711,7 @@ ProcessorEntry::Control::slider_adjusted ()
return;
}
- c->set_value ( c->interface_to_internal(_adjustment.get_value ()) );
+ c->set_value ( c->interface_to_internal(_adjustment.get_value ()) , Controllable::NoGroup);
set_tooltip ();
}
@@ -726,7 +726,7 @@ ProcessorEntry::Control::button_clicked ()
bool const n = _button.get_active ();
- c->set_value (n ? 0 : 1);
+ c->set_value (n ? 0 : 1, Controllable::NoGroup);
_button.set_active (!n);
set_tooltip ();
}
diff --git a/gtk2_ardour/shuttle_control.cc b/gtk2_ardour/shuttle_control.cc
index 94c27c2807..4616b76734 100644
--- a/gtk2_ardour/shuttle_control.cc
+++ b/gtk2_ardour/shuttle_control.cc
@@ -678,7 +678,7 @@ ShuttleControl::ShuttleControllable::ShuttleControllable (ShuttleControl& s)
}
void
-ShuttleControl::ShuttleControllable::set_value (double val)
+ShuttleControl::ShuttleControllable::set_value (double val, PBD::Controllable::GroupControlDisposition /*group_override*/)
{
sc.set_shuttle_fract ((val - lower()) / (upper() - lower()), true);
}
diff --git a/gtk2_ardour/shuttle_control.h b/gtk2_ardour/shuttle_control.h
index ed15a12bdf..20fe46096f 100644
--- a/gtk2_ardour/shuttle_control.h
+++ b/gtk2_ardour/shuttle_control.h
@@ -46,7 +46,7 @@ class ShuttleControl : public CairoWidget, public ARDOUR::SessionHandlePtr
struct ShuttleControllable : public PBD::Controllable {
ShuttleControllable (ShuttleControl&);
- void set_value (double);
+ void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
double get_value (void) const;
double lower() const { return -1.0; }
diff --git a/gtk2_ardour/stereo_panner.cc b/gtk2_ardour/stereo_panner.cc
index 91c8b025ac..304300fcdb 100644
--- a/gtk2_ardour/stereo_panner.cc
+++ b/gtk2_ardour/stereo_panner.cc
@@ -52,6 +52,8 @@ using namespace Gtk;
using namespace Gtkmm2ext;
using namespace ARDOUR_UI_UTILS;
+using PBD::Controllable;
+
StereoPanner::ColorScheme StereoPanner::colors[3];
bool StereoPanner::have_colors = false;
@@ -355,21 +357,21 @@ StereoPanner::on_button_press_event (GdkEventButton* ev)
/* left side dbl click */
if (Keyboard::modifier_state_contains (ev->state, Keyboard::SecondaryModifier)) {
/* 2ndary-double click on left, collapse to hard left */
- width_control->set_value (0);
- position_control->set_value (0);
+ width_control->set_value (0, Controllable::NoGroup);
+ position_control->set_value (0, Controllable::NoGroup);
} else {
- position_control->set_value (min_pos);
+ position_control->set_value (min_pos, Controllable::NoGroup);
}
} else if (ev->x > 2*width/3) {
if (Keyboard::modifier_state_contains (ev->state, Keyboard::SecondaryModifier)) {
/* 2ndary-double click on right, collapse to hard right */
- width_control->set_value (0);
- position_control->set_value (1.0);
+ width_control->set_value (0, Controllable::NoGroup);
+ position_control->set_value (1.0, Controllable::NoGroup);
} else {
- position_control->set_value (max_pos);
+ position_control->set_value (max_pos, Controllable::NoGroup);
}
} else {
- position_control->set_value (0.5);
+ position_control->set_value (0.5, Controllable::NoGroup);
}
} else {
@@ -381,13 +383,13 @@ StereoPanner::on_button_press_event (GdkEventButton* ev)
if (ev->x <= width/3) {
/* left side dbl click */
- width_control->set_value (max_width); // reset width to 100%
+ width_control->set_value (max_width, Controllable::NoGroup); // reset width to 100%
} else if (ev->x > 2*width/3) {
/* right side dbl click */
- width_control->set_value (-max_width); // reset width to inverted 100%
+ width_control->set_value (-max_width, Controllable::NoGroup); // reset width to inverted 100%
} else {
/* center dbl click */
- width_control->set_value (0); // collapse width to 0%
+ width_control->set_value (0, Controllable::NoGroup); // collapse width to 0%
}
}
@@ -500,19 +502,19 @@ StereoPanner::on_scroll_event (GdkEventScroll* ev)
switch (ev->direction) {
case GDK_SCROLL_LEFT:
wv += step;
- width_control->set_value (wv);
+ width_control->set_value (wv, Controllable::NoGroup);
break;
case GDK_SCROLL_UP:
pv -= step;
- position_control->set_value (pv);
+ position_control->set_value (pv, Controllable::NoGroup);
break;
case GDK_SCROLL_RIGHT:
wv -= step;
- width_control->set_value (wv);
+ width_control->set_value (wv, Controllable::NoGroup);
break;
case GDK_SCROLL_DOWN:
pv += step;
- position_control->set_value (pv);
+ position_control->set_value (pv, Controllable::NoGroup);
break;
}
@@ -551,9 +553,9 @@ StereoPanner::on_motion_notify_event (GdkEventMotion* ev)
double pv = position_control->get_value();
if (dragging_left) {
- position_control->set_value (pv - delta);
+ position_control->set_value (pv - delta, Controllable::NoGroup);
} else {
- position_control->set_value (pv + delta);
+ position_control->set_value (pv + delta, Controllable::NoGroup);
}
if (delta > 0.0) {
@@ -563,9 +565,9 @@ StereoPanner::on_motion_notify_event (GdkEventMotion* ev)
other side remains in place when we set
the position as well.
*/
- width_control->set_value (current_width + (delta * 2.0));
+ width_control->set_value (current_width + (delta * 2.0), Controllable::NoGroup);
} else {
- width_control->set_value (current_width + delta);
+ width_control->set_value (current_width + delta, Controllable::NoGroup);
}
_panner->thaw ();
@@ -579,7 +581,7 @@ StereoPanner::on_motion_notify_event (GdkEventMotion* ev)
if (!detented && fabs (current_width) < 0.02) {
detented = true;
/* snap to zero */
- width_control->set_value (0);
+ width_control->set_value (0, Controllable::NoGroup);
}
if (detented) {
@@ -589,21 +591,21 @@ StereoPanner::on_motion_notify_event (GdkEventMotion* ev)
/* have we pulled far enough to escape ? */
if (fabs (accumulated_delta) >= 0.025) {
- width_control->set_value (current_width + accumulated_delta);
+ width_control->set_value (current_width + accumulated_delta, Controllable::NoGroup);
detented = false;
accumulated_delta = false;
}
} else {
/* width needs to change by 2 * delta because both L & R move */
- width_control->set_value (current_width + (delta * 2.0));
+ width_control->set_value (current_width + (delta * 2.0), Controllable::NoGroup);
}
}
} else if (dragging_position) {
double pv = position_control->get_value(); // 0..1.0 ; 0 = left
- position_control->set_value (pv + delta);
+ position_control->set_value (pv + delta, Controllable::NoGroup);
}
last_drag_x = ev->x;
@@ -635,30 +637,30 @@ StereoPanner::on_key_press_event (GdkEventKey* ev)
switch (ev->keyval) {
case GDK_Up:
if (Keyboard::modifier_state_equals (ev->state, Keyboard::SecondaryModifier)) {
- width_control->set_value (1.0);
+ width_control->set_value (1.0, Controllable::NoGroup);
} else {
- width_control->set_value (wv + step);
+ width_control->set_value (wv + step, Controllable::NoGroup);
}
break;
case GDK_Down:
if (Keyboard::modifier_state_equals (ev->state, Keyboard::SecondaryModifier)) {
- width_control->set_value (-1.0);
+ width_control->set_value (-1.0, Controllable::NoGroup);
} else {
- width_control->set_value (wv - step);
+ width_control->set_value (wv - step, Controllable::NoGroup);
}
break;
case GDK_Left:
pv -= step;
- position_control->set_value (pv);
+ position_control->set_value (pv, Controllable::NoGroup);
break;
case GDK_Right:
pv += step;
- position_control->set_value (pv);
+ position_control->set_value (pv, Controllable::NoGroup);
break;
case GDK_0:
case GDK_KP_0:
- width_control->set_value (0.0);
+ width_control->set_value (0.0, Controllable::NoGroup);
break;
default:
diff --git a/gtk2_ardour/stereo_panner_editor.cc b/gtk2_ardour/stereo_panner_editor.cc
index e7a4a452fe..477a6650a4 100644
--- a/gtk2_ardour/stereo_panner_editor.cc
+++ b/gtk2_ardour/stereo_panner_editor.cc
@@ -31,6 +31,8 @@ using namespace std;
using namespace Gtk;
using namespace Gtkmm2ext;
+using PBD::Controllable;
+
StereoPannerEditor::StereoPannerEditor (StereoPanner* p)
: PannerEditor (_("Stereo Panner"))
, _panner (p)
@@ -103,7 +105,7 @@ StereoPannerEditor::position_changed ()
_ignore_changes = true;
double const v = _position.get_value() / 100;
- _panner->get_position_controllable()->set_value (v);
+ _panner->get_position_controllable()->set_value (v, Controllable::NoGroup);
set_width_range ();
_ignore_changes = false;
}
@@ -117,7 +119,7 @@ StereoPannerEditor::width_changed ()
_ignore_changes = true;
double const v = _width.get_value() / 100;
- _panner->get_width_controllable()->set_value (v);
+ _panner->get_width_controllable()->set_value (v, Controllable::NoGroup);
set_position_range ();
_ignore_changes = false;
}