mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-10 16:46:35 +01:00
propagate GUI track selection to control protocols; make MCP update when GUI track selection changes
git-svn-id: svn://localhost/ardour2/branches/3.0@11941 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
cd21bc58aa
commit
62620122a9
11 changed files with 113 additions and 3 deletions
|
|
@ -29,6 +29,8 @@
|
||||||
#include "ardour/midi_region.h"
|
#include "ardour/midi_region.h"
|
||||||
#include "ardour/audioplaylist.h"
|
#include "ardour/audioplaylist.h"
|
||||||
|
|
||||||
|
#include "control_protocol/control_protocol.h"
|
||||||
|
|
||||||
#include "editor.h"
|
#include "editor.h"
|
||||||
#include "actions.h"
|
#include "actions.h"
|
||||||
#include "audio_time_axis.h"
|
#include "audio_time_axis.h"
|
||||||
|
|
@ -965,6 +967,8 @@ Editor::track_selection_changed ()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RouteNotificationListPtr routes (new RouteNotificationList);
|
||||||
|
|
||||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
||||||
|
|
||||||
bool yn = (find (selection->tracks.begin(), selection->tracks.end(), *i) != selection->tracks.end());
|
bool yn = (find (selection->tracks.begin(), selection->tracks.end(), *i) != selection->tracks.end());
|
||||||
|
|
@ -983,9 +987,21 @@ Editor::track_selection_changed ()
|
||||||
} else {
|
} else {
|
||||||
(*i)->hide_selection ();
|
(*i)->hide_selection ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (yn) {
|
||||||
|
RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (*i);
|
||||||
|
if (rtav) {
|
||||||
|
routes->push_back (rtav->route());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ActionManager::set_sensitive (ActionManager::track_selection_sensitive_actions, !selection->tracks.empty());
|
ActionManager::set_sensitive (ActionManager::track_selection_sensitive_actions, !selection->tracks.empty());
|
||||||
|
|
||||||
|
/* notify control protocols */
|
||||||
|
|
||||||
|
ControlProtocol::TrackSelectionChanged (routes);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@ PBD::Signal0<void> ControlProtocol::VerticalZoomInAll;
|
||||||
PBD::Signal0<void> ControlProtocol::VerticalZoomOutAll;
|
PBD::Signal0<void> ControlProtocol::VerticalZoomOutAll;
|
||||||
PBD::Signal0<void> ControlProtocol::VerticalZoomInSelected;
|
PBD::Signal0<void> ControlProtocol::VerticalZoomInSelected;
|
||||||
PBD::Signal0<void> ControlProtocol::VerticalZoomOutSelected;
|
PBD::Signal0<void> ControlProtocol::VerticalZoomOutSelected;
|
||||||
|
PBD::Signal1<void,RouteNotificationListPtr> ControlProtocol::TrackSelectionChanged;
|
||||||
|
|
||||||
ControlProtocol::ControlProtocol (Session& s, string str, EventLoop* evloop)
|
ControlProtocol::ControlProtocol (Session& s, string str, EventLoop* evloop)
|
||||||
: BasicUI (s),
|
: BasicUI (s),
|
||||||
|
|
|
||||||
|
|
@ -24,10 +24,14 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
|
|
||||||
#include "pbd/stateful.h"
|
#include "pbd/stateful.h"
|
||||||
#include "pbd/signals.h"
|
#include "pbd/signals.h"
|
||||||
|
|
||||||
#include "control_protocol/basic_ui.h"
|
#include "control_protocol/basic_ui.h"
|
||||||
|
#include "control_protocol/types.h"
|
||||||
|
|
||||||
namespace ARDOUR {
|
namespace ARDOUR {
|
||||||
|
|
||||||
|
|
@ -72,6 +76,13 @@ class ControlProtocol : virtual public sigc::trackable, public PBD::Stateful, pu
|
||||||
static PBD::Signal0<void> VerticalZoomInSelected;
|
static PBD::Signal0<void> VerticalZoomInSelected;
|
||||||
static PBD::Signal0<void> VerticalZoomOutSelected;
|
static PBD::Signal0<void> VerticalZoomOutSelected;
|
||||||
|
|
||||||
|
/* signals that one UI (e.g. the GUI) can emit to get all other UI's to
|
||||||
|
respond. Typically this will always be GUI->"others" - the GUI pays
|
||||||
|
no attention to these signals.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static PBD::Signal1<void,RouteNotificationListPtr> TrackSelectionChanged;
|
||||||
|
|
||||||
/* the model here is as follows:
|
/* the model here is as follows:
|
||||||
|
|
||||||
we imagine most control surfaces being able to control
|
we imagine most control surfaces being able to control
|
||||||
|
|
|
||||||
34
libs/surfaces/control_protocol/control_protocol/types.h
Normal file
34
libs/surfaces/control_protocol/control_protocol/types.h
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2006 Paul Davis
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU Lesser
|
||||||
|
General Public License as published by the Free Software
|
||||||
|
Foundation; either version 2 of the License, or (at your
|
||||||
|
option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ardour_control_protocol_types_h__
|
||||||
|
#define __ardour_control_protocol_types_h__
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <boost/smart_ptr.hpp>
|
||||||
|
|
||||||
|
namespace ARDOUR {
|
||||||
|
class Route;
|
||||||
|
|
||||||
|
typedef std::vector<boost::shared_ptr<ARDOUR::Route> > RouteNotificationList;
|
||||||
|
typedef boost::shared_ptr<RouteNotificationList> RouteNotificationListPtr;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* __ardour_control_protocol_types_h__ */
|
||||||
|
|
@ -57,7 +57,6 @@
|
||||||
#include "mackie_control_exception.h"
|
#include "mackie_control_exception.h"
|
||||||
#include "surface_port.h"
|
#include "surface_port.h"
|
||||||
#include "surface.h"
|
#include "surface.h"
|
||||||
|
|
||||||
#include "strip.h"
|
#include "strip.h"
|
||||||
#include "control_group.h"
|
#include "control_group.h"
|
||||||
#include "meter.h"
|
#include "meter.h"
|
||||||
|
|
@ -112,6 +111,8 @@ MackieControlProtocol::MackieControlProtocol (Session& session)
|
||||||
this
|
this
|
||||||
);
|
);
|
||||||
|
|
||||||
|
TrackSelectionChanged.connect (gui_connections, MISSING_INVALIDATOR, ui_bind (&MackieControlProtocol::gui_track_selection_changed, this, _1), this);
|
||||||
|
|
||||||
_instance = this;
|
_instance = this;
|
||||||
|
|
||||||
build_button_map ();
|
build_button_map ();
|
||||||
|
|
@ -1158,3 +1159,11 @@ MackieControlProtocol::load_device_info (const string& name)
|
||||||
|
|
||||||
_device_info = i->second;
|
_device_info = i->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MackieControlProtocol::gui_track_selection_changed (ARDOUR::RouteNotificationListPtr rl)
|
||||||
|
{
|
||||||
|
for (Surfaces::iterator s = surfaces.begin(); s != surfaces.end(); ++s) {
|
||||||
|
(*s)->gui_selection_changed (rl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,8 @@
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
#include "device_info.h"
|
#include "device_info.h"
|
||||||
|
|
||||||
|
class RouteTimeAxisView;
|
||||||
|
|
||||||
namespace MIDI {
|
namespace MIDI {
|
||||||
class Port;
|
class Port;
|
||||||
}
|
}
|
||||||
|
|
@ -244,6 +246,7 @@ class MackieControlProtocol
|
||||||
PBD::ScopedConnectionList session_connections;
|
PBD::ScopedConnectionList session_connections;
|
||||||
PBD::ScopedConnectionList port_connections;
|
PBD::ScopedConnectionList port_connections;
|
||||||
PBD::ScopedConnectionList route_connections;
|
PBD::ScopedConnectionList route_connections;
|
||||||
|
PBD::ScopedConnectionList gui_connections;
|
||||||
bool _transport_previously_rolling;
|
bool _transport_previously_rolling;
|
||||||
// timer for two quick marker left presses
|
// timer for two quick marker left presses
|
||||||
Mackie::Timer _frm_left_last;
|
Mackie::Timer _frm_left_last;
|
||||||
|
|
@ -277,6 +280,8 @@ class MackieControlProtocol
|
||||||
void force_special_route_to_strip (boost::shared_ptr<ARDOUR::Route> r, uint32_t surface, uint32_t strip_number);
|
void force_special_route_to_strip (boost::shared_ptr<ARDOUR::Route> r, uint32_t surface, uint32_t strip_number);
|
||||||
void build_button_map ();
|
void build_button_map ();
|
||||||
|
|
||||||
|
void gui_track_selection_changed (ARDOUR::RouteNotificationListPtr);
|
||||||
|
|
||||||
/* BUTTON HANDLING */
|
/* BUTTON HANDLING */
|
||||||
|
|
||||||
/* implemented button handlers */
|
/* implemented button handlers */
|
||||||
|
|
|
||||||
|
|
@ -612,3 +612,17 @@ Strip::unlock_route ()
|
||||||
{
|
{
|
||||||
_route_locked = false;
|
_route_locked = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MidiByteArray
|
||||||
|
Strip::gui_selection_changed (ARDOUR::RouteNotificationListPtr rl)
|
||||||
|
{
|
||||||
|
for (ARDOUR::RouteNotificationList::iterator i = rl->begin(); i != rl->end(); ++i) {
|
||||||
|
if ((*i) == _route) {
|
||||||
|
std::cerr << "Strip " << _index << " selected, route = " << (*i)->name() << std::endl;
|
||||||
|
return _select->set_state (on);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cerr << "Strip " << _index << " NOT selected\n";
|
||||||
|
return _select->set_state (off);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,8 @@
|
||||||
#include "pbd/property_basics.h"
|
#include "pbd/property_basics.h"
|
||||||
#include "pbd/signals.h"
|
#include "pbd/signals.h"
|
||||||
|
|
||||||
|
#include "control_protocol/types.h"
|
||||||
|
|
||||||
#include "control_group.h"
|
#include "control_group.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "midi_byte_array.h"
|
#include "midi_byte_array.h"
|
||||||
|
|
@ -70,6 +72,8 @@ public:
|
||||||
void lock_route ();
|
void lock_route ();
|
||||||
void unlock_route ();
|
void unlock_route ();
|
||||||
|
|
||||||
|
MidiByteArray gui_selection_changed (ARDOUR::RouteNotificationListPtr);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Button* _solo;
|
Button* _solo;
|
||||||
Button* _recenable;
|
Button* _recenable;
|
||||||
|
|
@ -101,7 +105,6 @@ private:
|
||||||
|
|
||||||
void update_automation ();
|
void update_automation ();
|
||||||
void update_meter ();
|
void update_meter ();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -725,3 +725,15 @@ Surface::update_view_mode_display ()
|
||||||
_port->write ((*s)->display (1, text));
|
_port->write ((*s)->display (1, text));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Surface::gui_selection_changed (ARDOUR::RouteNotificationListPtr routes)
|
||||||
|
{
|
||||||
|
MidiByteArray msg;
|
||||||
|
|
||||||
|
for (Strips::iterator s = strips.begin(); s != strips.end(); ++s) {
|
||||||
|
msg << (*s)->gui_selection_changed (routes);
|
||||||
|
}
|
||||||
|
|
||||||
|
_port->write (msg);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@
|
||||||
|
|
||||||
#include "midi++/types.h"
|
#include "midi++/types.h"
|
||||||
|
|
||||||
|
#include "control_protocol/types.h"
|
||||||
|
|
||||||
#include "controls.h"
|
#include "controls.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "mackie_jog_wheel.h"
|
#include "mackie_jog_wheel.h"
|
||||||
|
|
@ -144,6 +146,8 @@ public:
|
||||||
void update_view_mode_display ();
|
void update_view_mode_display ();
|
||||||
void update_flip_mode_display ();
|
void update_flip_mode_display ();
|
||||||
|
|
||||||
|
void gui_selection_changed (ARDOUR::RouteNotificationListPtr);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void init_controls();
|
void init_controls();
|
||||||
void init_strips ();
|
void init_strips ();
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,8 @@ def build(bld):
|
||||||
'''
|
'''
|
||||||
obj.export_includes = ['./mackie']
|
obj.export_includes = ['./mackie']
|
||||||
obj.cxxflags = '-DPACKAGE="ardour_mackie"'
|
obj.cxxflags = '-DPACKAGE="ardour_mackie"'
|
||||||
obj.includes = ['.', './mackie']
|
# need ../libs because some GTK2 header files require stuff there
|
||||||
|
obj.includes = ['.', '../libs']
|
||||||
obj.name = 'libardour_mcp'
|
obj.name = 'libardour_mcp'
|
||||||
obj.target = 'ardour_mcp'
|
obj.target = 'ardour_mcp'
|
||||||
obj.uselib = 'GTKMM'
|
obj.uselib = 'GTKMM'
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue