save&restore gain levels; provide GUI control over relative route group bit; fix up solo/mute/recenable button naming as mixer strip width is set

git-svn-id: svn://localhost/ardour2/branches/3.0@5263 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2009-06-23 21:29:39 +00:00
parent d13fdaa9d1
commit f71a197270
6 changed files with 71 additions and 25 deletions

View File

@ -540,17 +540,13 @@ MixerStrip::set_width_enum (Width w, void* owner)
xml_node->add_property ("strip-width", enum_2_string (_width));
}
set_button_names ();
switch (w) {
case Wide:
if (rec_enable_button) {
((Gtk::Label*)rec_enable_button->get_child())->set_text (_("Record"));
}
if (show_sends_button) {
((Gtk::Label*)show_sends_button->get_child())->set_text (_("Sends"));
}
((Gtk::Label*)mute_button->get_child())->set_text (_("Mute"));
((Gtk::Label*)solo_button->get_child())->set_text (_("Solo"));
if (_route->comment() == "") {
comment_button.unset_bg (STATE_NORMAL);
@ -577,14 +573,9 @@ MixerStrip::set_width_enum (Width w, void* owner)
break;
case Narrow:
if (rec_enable_button) {
((Gtk::Label*)rec_enable_button->get_child())->set_text (_("Rec"));
}
if (show_sends_button) {
((Gtk::Label*)show_sends_button->get_child())->set_text (_("Snd"));
}
((Gtk::Label*)mute_button->get_child())->set_text (_("M"));
((Gtk::Label*)solo_button->get_child())->set_text (_("S"));
if (_route->comment() == "") {
comment_button.unset_bg (STATE_NORMAL);
@ -1492,19 +1483,39 @@ MixerStrip::revert_to_default_display ()
void
MixerStrip::set_button_names ()
{
rec_enable_button_label.set_text (_("Rec"));
mute_button_label.set_text (_("Mute"));
switch (_width) {
case Wide:
rec_enable_button_label.set_text (_("Rec"));
mute_button_label.set_text (_("Mute"));
switch (Config->get_solo_model()) {
case SoloInPlace:
solo_button_label.set_text (_("Solo"));
break;
case SoloAFL:
solo_button_label.set_text (_("AFL"));
break;
case SoloPFL:
solo_button_label.set_text (_("PFL"));
break;
}
break;
switch (Config->get_solo_model()) {
case SoloInPlace:
solo_button_label.set_text (_("Solo"));
break;
case SoloAFL:
solo_button_label.set_text (_("AFL"));
break;
case SoloPFL:
solo_button_label.set_text (_("PFL"));
default:
rec_enable_button_label.set_text (_("R"));
mute_button_label.set_text (_("M"));
switch (Config->get_solo_model()) {
case SoloInPlace:
solo_button_label.set_text (_("S"));
break;
case SoloAFL:
solo_button_label.set_text (_("A"));
break;
case SoloPFL:
solo_button_label.set_text (_("P"));
break;
}
break;
}
}

View File

@ -11,6 +11,7 @@ RouteGroupDialog::RouteGroupDialog (RouteGroup* g, StockID const & s)
_group (g),
_active (_("Active")),
_gain (_("Gain")),
_relative (_("Relative")),
_mute (_("Muting")),
_solo (_("Soloing")),
_rec_enable (_("Record enable")),
@ -21,6 +22,7 @@ RouteGroupDialog::RouteGroupDialog (RouteGroup* g, StockID const & s)
_active.set_active (_group->is_active ());
_gain.set_active (_group->property (RouteGroup::Gain));
_relative.set_active (_group->is_relative());
_mute.set_active (_group->property (RouteGroup::Mute));
_solo.set_active (_group->property (RouteGroup::Solo));
_rec_enable.set_active (_group->property (RouteGroup::RecEnable));
@ -34,6 +36,11 @@ RouteGroupDialog::RouteGroupDialog (RouteGroup* g, StockID const & s)
get_vbox()->pack_start (*h);
get_vbox()->pack_start (_active);
get_vbox()->pack_start (_gain);
h = manage (new HBox);
h->pack_start (_relative, PACK_EXPAND_PADDING);
get_vbox()->pack_start (*h);
get_vbox()->pack_start (_mute);
get_vbox()->pack_start (_solo);
get_vbox()->pack_start (_rec_enable);
@ -63,6 +70,7 @@ RouteGroupDialog::do_run ()
_group->set_property (RouteGroup::RecEnable, _rec_enable.get_active ());
_group->set_property (RouteGroup::Select, _select.get_active ());
_group->set_property (RouteGroup::Edit, _edit.get_active ());
_group->set_relative (_relative.get_active(), this);
}
return r;

View File

@ -17,6 +17,7 @@ private:
Gtk::Entry _name;
Gtk::CheckButton _active;
Gtk::CheckButton _gain;
Gtk::CheckButton _relative;
Gtk::CheckButton _mute;
Gtk::CheckButton _solo;
Gtk::CheckButton _rec_enable;

View File

@ -222,6 +222,7 @@ void
Amp::inc_gain (gain_t factor, void *src)
{
float desired_gain = _gain_control->user_float();
if (desired_gain == 0.0f) {
set_gain (0.000001f + (0.000001f * factor), src);
} else {
@ -255,9 +256,33 @@ Amp::state (bool full_state)
{
XMLNode& node (Processor::state (full_state));
node.add_property("type", "amp");
char buf[32];
snprintf (buf, sizeof (buf), "%2.12f", _gain_control->get_value());
node.add_property("gain", buf);
return node;
}
int
Amp::set_state (const XMLNode& node)
{
const XMLProperty* prop;
Processor::set_state (node);
prop = node.property ("gain");
if (prop) {
gain_t val;
if (sscanf (prop->value().c_str(), "%f", &val) == 1) {
_gain_control->set_value (val);
}
}
return 0;
}
void
Amp::GainControl::set_value (float val)
{

View File

@ -51,6 +51,7 @@ public:
void apply_gain_automation(bool yn) { _apply_gain_automation = yn; }
XMLNode& state (bool full);
int set_state (const XMLNode&);
static void apply_gain (BufferSet& bufs, nframes_t nframes, gain_t initial, gain_t target);
static void apply_simple_gain(BufferSet& bufs, nframes_t nframes, gain_t target);

View File

@ -262,7 +262,7 @@ Route::set_gain (gain_t val, void *src)
if (src != 0 && _route_group && src != _route_group && _route_group->active_property (RouteGroup::Gain)) {
if (_route_group->is_relative()) {
gain_t usable_gain = _amp->gain();
if (usable_gain < 0.000001f) {
usable_gain = 0.000001f;
@ -1739,7 +1739,7 @@ Route::set_processor_state (const XMLNode& node)
for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
XMLProperty* id_prop = (*niter)->property(X_("id"));
cerr << "\tchecking " << id_prop->value() << endl;
if (id_prop && (*i)->id() == id_prop->value()) {
processorInStateList = true;
break;
@ -1772,7 +1772,7 @@ Route::set_processor_state (const XMLNode& node)
while (o != _processors.end()) {
XMLProperty* id_prop = (*niter)->property(X_("id"));
if (id_prop && (*o)->id() == id_prop->value()) {
break;
break;
}
++o;