void
BasicUI::rewind ()
{
- session->request_transport_speed (session->transport_speed() * 1.5);
+ session->request_transport_speed (session->transport_speed() - 1.5);
}
void
}
}
+
+void
+MackieControlProtocol::set_master_on_surface_strip (uint32_t surface, uint32_t strip_number)
+{
+ force_special_route_to_strip (session->master_out(), surface, strip_number);
+}
+
+void
+MackieControlProtocol::set_monitor_on_surface_strip (uint32_t surface, uint32_t strip_number)
+{
+ force_special_route_to_strip (session->monitor_out(), surface, strip_number);
+}
+
+void
+MackieControlProtocol::force_special_route_to_strip (boost::shared_ptr<Route> r, uint32_t surface, uint32_t strip_number)
+{
+ if (!r) {
+ return;
+ }
+
+ for (Surfaces::iterator s = surfaces.begin(); s != surfaces.end(); ++s) {
+ if ((*s)->number() == surface) {
+ Strip* strip = (*s)->nth_strip (strip_number);
+ if (strip) {
+ strip->set_route (session->master_out());
+ strip->lock_route ();
+ }
+ }
+ }
+}
std::list<boost::shared_ptr<ARDOUR::Bundle> > bundles ();
+ void set_master_on_surface_strip (uint32_t surface, uint32_t strip);
+ void set_monitor_on_surface_strip (uint32_t surface, uint32_t strip);
+
uint32_t n_strips () const;
bool has_editor () const { return true; }
bool midi_input_handler (Glib::IOCondition ioc, MIDI::Port* port);
void clear_ports ();
+ std::vector<std::string> _f_actions;
+
+ void force_special_route_to_strip (boost::shared_ptr<ARDOUR::Route> r, uint32_t surface, uint32_t strip_number);
+
+ /* BUTTON HANDLING */
+
struct ButtonHandlers {
Mackie::LedState (MackieControlProtocol::*press) (Mackie::Button&);
Mackie::LedState (MackieControlProtocol::*release) (Mackie::Button&);
void build_button_map ();
- std::vector<std::string> _f_actions;
-
/* implemented button handlers */
Mackie::LedState frm_left_press(Mackie::Button &);
Mackie::LedState frm_left_release(Mackie::Button &);
, _gain (0)
, _index (index)
, _surface (&s)
+ , _route_locked (false)
{
/* build the controls for this track, which will automatically add them
to the Group
void
Strip::set_route (boost::shared_ptr<Route> r)
{
+ if (_route_locked) {
+ return;
+ }
+
route_connections.drop_connections ();
_route = r;
} else if (button.id() >= Button::select_base_id &&
button.id() < Button::select_base_id + 8) {
- _surface->mcp().select_track (_route);
+ int lock_mod = (MackieControlProtocol::MODIFIER_CONTROL|MackieControlProtocol::MODIFIER_SHIFT);
+
+ if ((_surface->mcp().modifier_state() & lock_mod) == lock_mod) {
+ _route_locked = !_route_locked;
+ } else {
+ _surface->mcp().select_track (_route);
+ }
} else if (button.id() >= Button::vselect_base_id &&
button.id() < Button::vselect_base_id + 8) {
return retval;
}
+
+void
+Strip::lock_route ()
+{
+ _route_locked = true;
+}
+
+void
+Strip::unlock_route ()
+{
+ _route_locked = false;
+}
MidiByteArray blank_display (uint32_t line_number);
MidiByteArray zero ();
+ void lock_route ();
+ void unlock_route ();
+
private:
Button* _solo;
Button* _recenable;
Meter* _meter;
int _index;
Surface* _surface;
+ bool _route_locked;
boost::shared_ptr<ARDOUR::Route> _route;
PBD::ScopedConnectionList route_connections;