#include "mixer_strip.h"
#include "plugin_pin_dialog.h"
#include "prompter.h"
+#include "rgb_macros.h"
#include "route_time_axis.h"
#include "route_ui.h"
#include "timers.h"
#include "utils.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
using namespace Gtk;
using namespace Gtkmm2ext;
using namespace ARDOUR;
std::string RouteUI::program_port_prefix;
RouteUI::RouteUI (ARDOUR::Session* sess)
- : mute_menu(0)
+ : monitor_input_button (0)
+ , monitor_disk_button (0)
+ , mute_menu(0)
, solo_menu(0)
, sends_menu(0)
, record_menu(0)
delete comment_window;
delete input_selector;
delete output_selector;
+ delete monitor_input_button;
+ delete monitor_disk_button;
delete _invert_menu;
send_blink_connection.disconnect ();
multiple_mute_change = false;
multiple_solo_change = false;
_i_am_the_modifier = 0;
- vca_button = 0;
input_selector = 0;
output_selector = 0;
show_sends_button->set_name ("send alert button");
UI::instance()->set_tip (show_sends_button, _("make mixer strips show sends to this bus"), "");
- monitor_input_button = manage (new ArdourButton (ArdourButton::default_elements));
+ monitor_input_button = new ArdourButton (ArdourButton::default_elements);
monitor_input_button->set_name ("monitor button");
monitor_input_button->set_text (_("In"));
UI::instance()->set_tip (monitor_input_button, _("Monitor input"), "");
monitor_input_button->set_no_show_all (true);
- monitor_disk_button = manage (new ArdourButton (ArdourButton::default_elements));
+ monitor_disk_button = new ArdourButton (ArdourButton::default_elements);
monitor_disk_button->set_name ("monitor button");
monitor_disk_button->set_text (_("Disk"));
UI::instance()->set_tip (monitor_disk_button, _("Monitor playback"), "");
check_rec_enable_sensitivity ();
maybe_add_route_print_mgr ();
route_color_changed();
+ route_gui_changed (PropertyChange (Properties::selected));
}
void
_mute_release->routes = rl;
}
- _session->set_control (_route->mute_control(), _route->muted_by_self() ? 0.0 : 1.0, Controllable::UseGroup);
-
+ _route->mute_control()->set_value (!_route->muted_by_self(), Controllable::UseGroup);
}
}
}
/* ??? we need a just_one_listen() method */
} else {
DisplaySuspender ds;
- boost::shared_ptr<ControlList> cl (new ControlList);
- cl->push_back (_route->solo_control());
- _session->set_controls (cl, 1.0, Controllable::NoGroup);
+ _route->solo_control()->set_value (1.0, Controllable::NoGroup);
}
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
} else {
boost::shared_ptr<Track> trk = track();
- _session->set_control (trk->rec_enable_control(), !trk->rec_enable_control()->get_value(), Controllable::UseGroup);
+ trk->rec_enable_control()->set_value (!trk->rec_enable_control()->get_value(), Controllable::UseGroup);
}
}
mute_button->set_active_state (mute_active_state (_session, _route));
}
-void
-RouteUI::update_vca_display ()
-{
- if (!vca_button) {
- return;
- }
-
- VCAList vcas (_session->vca_manager().vcas());
- string label;
-
- for (VCAList::iterator v = vcas.begin(); v != vcas.end(); ++v) {
- if (_route->slaved_to (*v)) {
- if (!label.empty()) {
- label += ' ';
- }
- label += PBD::to_string ((*v)->number(), std::dec);
- }
- }
-
- if (label.empty()) {
- label = _("-vca-");
- vca_button->set_active_state (Gtkmm2ext::Off);
- } else {
- vca_button->set_active_state (Gtkmm2ext::ExplicitActive);
- }
-
- vca_button->set_text (label);
-}
void
RouteUI::route_rec_enable_changed ()
{
- blink_rec_display(true); //this lets the button change "immediately" rather than wait for the next blink
- update_monitoring_display ();
+ blink_rec_display (true); //this lets the button change "immediately" rather than wait for the next blink
}
void
RouteUI::session_rec_enable_changed ()
{
- blink_rec_display(true); //this lets the button change "immediately" rather than wait for the next blink
- update_monitoring_display ();
+ blink_rec_display (true); //this lets the button change "immediately" rather than wait for the next blink
}
void
int
RouteUI::set_color_from_route ()
{
- return 0;
+ if (_route->presentation_info().color_set()) {
+ return 0; /* nothing to do */
+ }
+
+ return 1; /* pick a color */
}
/** @return true if this name should be used for the route, otherwise false */
}
if (N <= _max_invert_buttons) {
- UI::instance()->set_tip (*b, string_compose (_("Left-click to invert (phase reverse) channel %1 of this track. Right-click to show menu."), i + 1));
+ UI::instance()->set_tip (*b, string_compose (_("Left-click to invert polarity of channel %1 of this track. Right-click to show menu."), i + 1));
} else {
- UI::instance()->set_tip (*b, _("Click to show a menu of channels for inversion (phase reverse)"));
+ UI::instance()->set_tip (*b, _("Click to show a menu of channels to invert polarity"));
}
_invert_buttons.push_back (b);
route_color_changed ();
}
}
-
- if (what_changed.contains (Properties::selected)) {
- show_selected ();
- }
-}
-
-void
-RouteUI::set_selected (bool yn)
-{
- Selectable::set_selected (yn);
- if (_route) {
- _route->presentation_info().set_selected (yn);
- }
-}
-
-bool
-RouteUI::selected () const
-{
- /* XXX not sure if this is a wise design. Probably don't really want
- * the cached _selected value from Selectable.
- */
-
- if (!_route) {
- return _selected;
- }
-
- return _route->presentation_info().selected();
}
void
/* old v4.x or earlier session. Use this information */
- int component;
+ int red, green, blue;
char colon;
- PresentationInfo::color_t color = 0;
stringstream ss (p);
decode to rgb ..
*/
- ss >> component;
+ ss >> red;
ss >> colon;
- color |= ((component >> 2) << 16);
- ss >> component;
+ ss >> green;
ss >> colon;
- color |= ((component >> 2) << 8);
- ss >> component;
- color |= (component >> 2);
+ ss >> blue;
- _route->presentation_info().set_color (color);
+ red >>= 2;
+ green >>= 2;
+ blue >>= 2;
+
+ _route->presentation_info().set_color (RGBA_TO_UINT (red, green, blue, 255));
}
set_color_from_rgba (c, _route->presentation_info().color());
}
return false;
}
+
+boost::shared_ptr<Stripable>
+RouteUI::stripable () const
+{
+ return _route;
+}
+