mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 07:14:56 +01:00
add solo isolate indicator in editor route list
git-svn-id: svn://localhost/ardour2/branches/3.0@6343 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
2f350c491e
commit
6ab765e8fa
9 changed files with 113 additions and 22 deletions
|
|
@ -2,4 +2,4 @@
|
||||||
. `dirname "$0"`/../build/default/gtk2_ardour/ardev_common_waf.sh
|
. `dirname "$0"`/../build/default/gtk2_ardour/ardev_common_waf.sh
|
||||||
LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
|
LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
|
||||||
export ARDOUR_INSIDE_GDB=1
|
export ARDOUR_INSIDE_GDB=1
|
||||||
exec gdb --args $TOP/$EXECUTABLE "$@"
|
exec gdb $TOP/$EXECUTABLE $@
|
||||||
|
|
|
||||||
|
|
@ -105,18 +105,24 @@ EditorRoutes::EditorRoutes (Editor* e)
|
||||||
|
|
||||||
solo_state_column->add_attribute(solo_col_renderer->property_state(), _columns.solo_state);
|
solo_state_column->add_attribute(solo_col_renderer->property_state(), _columns.solo_state);
|
||||||
|
|
||||||
|
// Solo isolate toggle
|
||||||
|
CellRendererPixbufMulti* solo_iso_renderer = manage (new CellRendererPixbufMulti());
|
||||||
|
|
||||||
|
solo_iso_renderer->set_pixbuf (0, ::get_icon("act-disabled"));
|
||||||
|
solo_iso_renderer->set_pixbuf (1, ::get_icon("solo-isolated"));
|
||||||
|
solo_iso_renderer->signal_changed().connect (mem_fun (*this, &EditorRoutes::on_tv_solo_isolate_toggled));
|
||||||
|
|
||||||
|
TreeViewColumn* solo_isolate_state_column = manage (new TreeViewColumn("I", *solo_iso_renderer));
|
||||||
|
|
||||||
|
solo_isolate_state_column->add_attribute(solo_iso_renderer->property_state(), _columns.solo_isolate_state);
|
||||||
|
|
||||||
_display.append_column (*rec_state_column);
|
_display.append_column (*rec_state_column);
|
||||||
_display.append_column (*mute_state_column);
|
_display.append_column (*mute_state_column);
|
||||||
_display.append_column (*solo_state_column);
|
_display.append_column (*solo_state_column);
|
||||||
|
_display.append_column (*solo_isolate_state_column);
|
||||||
_display.append_column (_("Show"), _columns.visible);
|
_display.append_column (_("Show"), _columns.visible);
|
||||||
_display.append_column (_("Name"), _columns.text);
|
_display.append_column (_("Name"), _columns.text);
|
||||||
|
|
||||||
_display.get_column (0)->set_data (X_("colnum"), GUINT_TO_POINTER(0));
|
|
||||||
_display.get_column (1)->set_data (X_("colnum"), GUINT_TO_POINTER(1));
|
|
||||||
_display.get_column (2)->set_data (X_("colnum"), GUINT_TO_POINTER(2));
|
|
||||||
_display.get_column (3)->set_data (X_("colnum"), GUINT_TO_POINTER(3));
|
|
||||||
_display.get_column (4)->set_data (X_("colnum"), GUINT_TO_POINTER(4));
|
|
||||||
|
|
||||||
_display.set_headers_visible (true);
|
_display.set_headers_visible (true);
|
||||||
_display.set_name ("TrackListDisplay");
|
_display.set_name ("TrackListDisplay");
|
||||||
_display.get_selection()->set_mode (SELECTION_SINGLE);
|
_display.get_selection()->set_mode (SELECTION_SINGLE);
|
||||||
|
|
@ -125,17 +131,17 @@ EditorRoutes::EditorRoutes (Editor* e)
|
||||||
_display.set_size_request (100, -1);
|
_display.set_size_request (100, -1);
|
||||||
_display.add_object_drag (_columns.route.index(), "routes");
|
_display.add_object_drag (_columns.route.index(), "routes");
|
||||||
|
|
||||||
CellRendererText* name_cell = dynamic_cast<CellRendererText*> (_display.get_column_cell_renderer (4));
|
CellRendererText* name_cell = dynamic_cast<CellRendererText*> (_display.get_column_cell_renderer (5));
|
||||||
assert (name_cell);
|
assert (name_cell);
|
||||||
|
|
||||||
TreeViewColumn* name_column = _display.get_column (4);
|
TreeViewColumn* name_column = _display.get_column (5);
|
||||||
assert (name_column);
|
assert (name_column);
|
||||||
|
|
||||||
name_column->add_attribute (name_cell->property_editable(), _columns.name_editable);
|
name_column->add_attribute (name_cell->property_editable(), _columns.name_editable);
|
||||||
name_cell->property_editable() = true;
|
name_cell->property_editable() = true;
|
||||||
name_cell->signal_edited().connect (mem_fun (*this, &EditorRoutes::name_edit));
|
name_cell->signal_edited().connect (mem_fun (*this, &EditorRoutes::name_edit));
|
||||||
|
|
||||||
CellRendererToggle* visible_cell = dynamic_cast<CellRendererToggle*> (_display.get_column_cell_renderer (3));
|
CellRendererToggle* visible_cell = dynamic_cast<CellRendererToggle*> (_display.get_column_cell_renderer (4));
|
||||||
|
|
||||||
visible_cell->property_activatable() = true;
|
visible_cell->property_activatable() = true;
|
||||||
visible_cell->property_radio() = false;
|
visible_cell->property_radio() = false;
|
||||||
|
|
@ -208,6 +214,20 @@ EditorRoutes::on_tv_solo_enable_toggled (Glib::ustring const & path_string)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
EditorRoutes::on_tv_solo_isolate_toggled (Glib::ustring const & path_string)
|
||||||
|
{
|
||||||
|
// Get the model row that has been toggled.
|
||||||
|
Gtk::TreeModel::Row row = *_model->get_iter (Gtk::TreeModel::Path (path_string));
|
||||||
|
|
||||||
|
TimeAxisView *tv = row[_columns.tv];
|
||||||
|
AudioTimeAxisView *atv = dynamic_cast<AudioTimeAxisView*> (tv);
|
||||||
|
|
||||||
|
if (atv != 0) {
|
||||||
|
atv->route()->set_solo_isolated (!atv->route()->solo_isolated(), this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
EditorRoutes::build_menu ()
|
EditorRoutes::build_menu ()
|
||||||
{
|
{
|
||||||
|
|
@ -372,6 +392,7 @@ EditorRoutes::routes_added (list<RouteTimeAxisView*> routes)
|
||||||
|
|
||||||
(*x)->route()->mute_changed.connect (mem_fun (*this, &EditorRoutes::update_mute_display));
|
(*x)->route()->mute_changed.connect (mem_fun (*this, &EditorRoutes::update_mute_display));
|
||||||
(*x)->route()->solo_changed.connect (mem_fun (*this, &EditorRoutes::update_solo_display));
|
(*x)->route()->solo_changed.connect (mem_fun (*this, &EditorRoutes::update_solo_display));
|
||||||
|
(*x)->route()->solo_isolated_changed.connect (mem_fun (*this, &EditorRoutes::update_solo_isolate_display));
|
||||||
}
|
}
|
||||||
|
|
||||||
update_rec_display ();
|
update_rec_display ();
|
||||||
|
|
@ -903,6 +924,18 @@ EditorRoutes::update_solo_display (void* /*src*/)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
EditorRoutes::update_solo_isolate_display (void* /*src*/)
|
||||||
|
{
|
||||||
|
TreeModel::Children rows = _model->children();
|
||||||
|
TreeModel::Children::iterator i;
|
||||||
|
|
||||||
|
for (i = rows.begin(); i != rows.end(); ++i) {
|
||||||
|
boost::shared_ptr<Route> route = (*i)[_columns.route];
|
||||||
|
(*i)[_columns.solo_isolate_state] = RouteUI::solo_isolate_visual_state (route) > 0 ? 1 : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
list<TimeAxisView*>
|
list<TimeAxisView*>
|
||||||
EditorRoutes::views () const
|
EditorRoutes::views () const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,7 @@ private:
|
||||||
void on_tv_rec_enable_toggled (Glib::ustring const &);
|
void on_tv_rec_enable_toggled (Glib::ustring const &);
|
||||||
void on_tv_mute_enable_toggled (Glib::ustring const &);
|
void on_tv_mute_enable_toggled (Glib::ustring const &);
|
||||||
void on_tv_solo_enable_toggled (Glib::ustring const &);
|
void on_tv_solo_enable_toggled (Glib::ustring const &);
|
||||||
|
void on_tv_solo_isolate_toggled (Glib::ustring const &);
|
||||||
void build_menu ();
|
void build_menu ();
|
||||||
void show_menu ();
|
void show_menu ();
|
||||||
void route_deleted (Gtk::TreeModel::Path const &);
|
void route_deleted (Gtk::TreeModel::Path const &);
|
||||||
|
|
@ -67,6 +68,7 @@ private:
|
||||||
void update_rec_display ();
|
void update_rec_display ();
|
||||||
void update_mute_display (void* /*src*/);
|
void update_mute_display (void* /*src*/);
|
||||||
void update_solo_display (void* /*src*/);
|
void update_solo_display (void* /*src*/);
|
||||||
|
void update_solo_isolate_display (void* /*src*/);
|
||||||
void set_all_tracks_visibility (bool);
|
void set_all_tracks_visibility (bool);
|
||||||
void set_all_audio_visibility (int, bool);
|
void set_all_audio_visibility (int, bool);
|
||||||
void show_all_routes ();
|
void show_all_routes ();
|
||||||
|
|
@ -93,6 +95,7 @@ private:
|
||||||
add (rec_enabled);
|
add (rec_enabled);
|
||||||
add (mute_state);
|
add (mute_state);
|
||||||
add (solo_state);
|
add (solo_state);
|
||||||
|
add (solo_isolate_state);
|
||||||
add (is_track);
|
add (is_track);
|
||||||
add (tv);
|
add (tv);
|
||||||
add (route);
|
add (route);
|
||||||
|
|
@ -104,6 +107,7 @@ private:
|
||||||
Gtk::TreeModelColumn<bool> rec_enabled;
|
Gtk::TreeModelColumn<bool> rec_enabled;
|
||||||
Gtk::TreeModelColumn<uint32_t> mute_state;
|
Gtk::TreeModelColumn<uint32_t> mute_state;
|
||||||
Gtk::TreeModelColumn<uint32_t> solo_state;
|
Gtk::TreeModelColumn<uint32_t> solo_state;
|
||||||
|
Gtk::TreeModelColumn<uint32_t> solo_isolate_state;
|
||||||
Gtk::TreeModelColumn<bool> is_track;
|
Gtk::TreeModelColumn<bool> is_track;
|
||||||
Gtk::TreeModelColumn<TimeAxisView*> tv;
|
Gtk::TreeModelColumn<TimeAxisView*> tv;
|
||||||
Gtk::TreeModelColumn<boost::shared_ptr<ARDOUR::Route> > route;
|
Gtk::TreeModelColumn<boost::shared_ptr<ARDOUR::Route> > route;
|
||||||
|
|
|
||||||
BIN
gtk2_ardour/icons/solo-isolated.png
Normal file
BIN
gtk2_ardour/icons/solo-isolated.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 392 B |
|
|
@ -668,6 +668,10 @@ RouteUI::listen_changed(void* /*src*/)
|
||||||
int
|
int
|
||||||
RouteUI::solo_visual_state (boost::shared_ptr<Route> r)
|
RouteUI::solo_visual_state (boost::shared_ptr<Route> r)
|
||||||
{
|
{
|
||||||
|
if (r->is_master() || r->is_control()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (Config->get_solo_control_is_listen_control()) {
|
if (Config->get_solo_control_is_listen_control()) {
|
||||||
|
|
||||||
if (r->listening()) {
|
if (r->listening()) {
|
||||||
|
|
@ -676,7 +680,31 @@ RouteUI::solo_visual_state (boost::shared_ptr<Route> r)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (r->soloed()) {
|
||||||
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
RouteUI::solo_visual_state_with_isolate (boost::shared_ptr<Route> r)
|
||||||
|
{
|
||||||
|
if (r->is_master() || r->is_control()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Config->get_solo_control_is_listen_control()) {
|
||||||
|
|
||||||
|
if (r->listening()) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if (r->solo_isolated()) {
|
if (r->solo_isolated()) {
|
||||||
return 2;
|
return 2;
|
||||||
|
|
@ -685,9 +713,20 @@ RouteUI::solo_visual_state (boost::shared_ptr<Route> r)
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
RouteUI::solo_isolate_visual_state (boost::shared_ptr<Route> r)
|
||||||
|
{
|
||||||
|
if (r->is_master() || r->is_control()) {
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (r->solo_isolated()) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -713,7 +752,7 @@ RouteUI::update_solo_display ()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
solo_button->set_visual_state (solo_visual_state (_route));
|
solo_button->set_visual_state (solo_visual_state_with_isolate (_route));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -731,6 +770,10 @@ RouteUI::mute_changed(void* /*src*/)
|
||||||
int
|
int
|
||||||
RouteUI::mute_visual_state (Session& s, boost::shared_ptr<Route> r)
|
RouteUI::mute_visual_state (Session& s, boost::shared_ptr<Route> r)
|
||||||
{
|
{
|
||||||
|
if (r->is_master() || r->is_control()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (Config->get_show_solo_mutes()) {
|
if (Config->get_show_solo_mutes()) {
|
||||||
|
|
||||||
if (r->muted ()) {
|
if (r->muted ()) {
|
||||||
|
|
|
||||||
|
|
@ -192,6 +192,8 @@ class RouteUI : public virtual AxisView
|
||||||
void open_remote_control_id_dialog ();
|
void open_remote_control_id_dialog ();
|
||||||
|
|
||||||
static int solo_visual_state (boost::shared_ptr<ARDOUR::Route>);
|
static int solo_visual_state (boost::shared_ptr<ARDOUR::Route>);
|
||||||
|
static int solo_visual_state_with_isolate (boost::shared_ptr<ARDOUR::Route>);
|
||||||
|
static int solo_isolate_visual_state (boost::shared_ptr<ARDOUR::Route>);
|
||||||
static int mute_visual_state (ARDOUR::Session &, boost::shared_ptr<ARDOUR::Route>);
|
static int mute_visual_state (ARDOUR::Session &, boost::shared_ptr<ARDOUR::Route>);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
||||||
|
|
@ -130,7 +130,7 @@ class Route : public SessionObject, public AutomatableControls, public RouteGrou
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void set_solo (bool yn, void *src);
|
void set_solo (bool yn, void *src);
|
||||||
bool soloed () const {return self_soloed () || soloed_by_others (); }
|
bool soloed () const { return self_soloed () || soloed_by_others (); }
|
||||||
|
|
||||||
bool soloed_by_others () const { return !_solo_isolated && _soloed_by_others; }
|
bool soloed_by_others () const { return !_solo_isolated && _soloed_by_others; }
|
||||||
bool self_soloed () const { return _self_solo; }
|
bool self_soloed () const { return _self_solo; }
|
||||||
|
|
|
||||||
|
|
@ -631,8 +631,6 @@ Route::set_solo_isolated (bool yn, void *src)
|
||||||
|
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
|
|
||||||
cerr << _name << " Solo isolated was " << _solo_isolated << endl;
|
|
||||||
|
|
||||||
if (yn) {
|
if (yn) {
|
||||||
if (_solo_isolated == 0) {
|
if (_solo_isolated == 0) {
|
||||||
changed = true;
|
changed = true;
|
||||||
|
|
@ -645,8 +643,6 @@ Route::set_solo_isolated (bool yn, void *src)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cerr << "\tnow " << _solo_isolated << endl;
|
|
||||||
|
|
||||||
if (changed) {
|
if (changed) {
|
||||||
set_delivery_solo ();
|
set_delivery_solo ();
|
||||||
solo_isolated_changed (src);
|
solo_isolated_changed (src);
|
||||||
|
|
|
||||||
|
|
@ -167,6 +167,19 @@ Port::get_state () const
|
||||||
node->add_property ("mode", PortFactory::mode_to_string (_mode));
|
node->add_property ("mode", PortFactory::mode_to_string (_mode));
|
||||||
node->add_property ("type", get_typestring());
|
node->add_property ("type", get_typestring());
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
byte device_inquiry[6];
|
||||||
|
|
||||||
|
device_inquiry[0] = 0xf0;
|
||||||
|
device_inquiry[0] = 0x7e;
|
||||||
|
device_inquiry[0] = 0x7f;
|
||||||
|
device_inquiry[0] = 0x06;
|
||||||
|
device_inquiry[0] = 0x02;
|
||||||
|
device_inquiry[0] = 0xf7;
|
||||||
|
|
||||||
|
write (device_inquiry, sizeof (device_inquiry), 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
return *node;
|
return *node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue