mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 23:05:04 +01:00
Mix group tabs in the mixer.
git-svn-id: svn://localhost/ardour2/branches/3.0@5228 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
9dfa933c6e
commit
be3aff4bda
15 changed files with 277 additions and 28 deletions
|
|
@ -393,7 +393,7 @@
|
|||
<menuitem action='ToggleMeasureVisibility'/>
|
||||
<menuitem action='ToggleWaveformsWhileRecording'/>
|
||||
<menuitem action='ToggleSummary'/>
|
||||
<menuitem action='ToggleEditGroupTabs'/>
|
||||
<menuitem action='ToggleGroupTabs'/>
|
||||
</menu>
|
||||
<menu name='JACK' action='JACK'>
|
||||
<menuitem action='JACKDisconnect'/>
|
||||
|
|
|
|||
|
|
@ -345,7 +345,7 @@ class Editor : public PublicEditor
|
|||
void toggle_zero_line_visibility ();
|
||||
void toggle_waveforms_while_recording ();
|
||||
void set_summary ();
|
||||
void set_edit_group_tabs ();
|
||||
void set_group_tabs ();
|
||||
void toggle_measure_visibility ();
|
||||
void toggle_logo_visibility ();
|
||||
|
||||
|
|
|
|||
|
|
@ -810,7 +810,7 @@ Editor::register_actions ()
|
|||
|
||||
ActionManager::register_toggle_action (editor_actions, X_("ToggleSummary"), _("Show Summary"), mem_fun (*this, &Editor::set_summary));
|
||||
|
||||
ActionManager::register_toggle_action (editor_actions, X_("ToggleEditGroupTabs"), _("Show Edit Group Tabs"), mem_fun (*this, &Editor::set_edit_group_tabs));
|
||||
ActionManager::register_toggle_action (editor_actions, X_("ToggleGroupTabs"), _("Show Group Tabs"), mem_fun (*this, &Editor::set_group_tabs));
|
||||
|
||||
ActionManager::register_toggle_action (editor_actions, X_("ToggleMeasureVisibility"), _("Show Measures"), mem_fun (*this, &Editor::toggle_measure_visibility));
|
||||
|
||||
|
|
@ -899,12 +899,12 @@ Editor::set_summary ()
|
|||
}
|
||||
|
||||
void
|
||||
Editor::set_edit_group_tabs ()
|
||||
Editor::set_group_tabs ()
|
||||
{
|
||||
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("ToggleEditGroupTabs"));
|
||||
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("ToggleGroupTabs"));
|
||||
if (act) {
|
||||
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
|
||||
session->config.set_show_edit_group_tabs (tact->get_active ());
|
||||
session->config.set_show_group_tabs (tact->get_active ());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1302,16 +1302,16 @@ Editor::parameter_changed (std::string p)
|
|||
tact->set_active (s);
|
||||
}
|
||||
}
|
||||
} else if (p == "show-edit-group-tabs") {
|
||||
} else if (p == "show-group-tabs") {
|
||||
|
||||
bool const s = session->config.get_show_edit_group_tabs ();
|
||||
bool const s = session->config.get_show_group_tabs ();
|
||||
if (s) {
|
||||
_group_tabs->show ();
|
||||
} else {
|
||||
_group_tabs->hide ();
|
||||
}
|
||||
|
||||
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("ToggleEditGroupTabs"));
|
||||
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("ToggleGroupTabs"));
|
||||
if (act) {
|
||||
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
|
||||
if (tact->get_active () != s) {
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ Editor::show_editor_mixer (bool yn)
|
|||
current_mixer_strip->set_route (r);
|
||||
|
||||
if (created) {
|
||||
current_mixer_strip->set_width (editor_mixer_strip_width, (void*) this);
|
||||
current_mixer_strip->set_width_enum (editor_mixer_strip_width, (void*) this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -213,7 +213,7 @@ Editor::set_selected_mixer_strip (TimeAxisView& view)
|
|||
}
|
||||
|
||||
if (created) {
|
||||
current_mixer_strip->set_width (editor_mixer_strip_width, (void*) this);
|
||||
current_mixer_strip->set_width_enum (editor_mixer_strip_width, (void*) this);
|
||||
}
|
||||
|
||||
current_mixer_strip->set_route (at->route());
|
||||
|
|
|
|||
146
gtk2_ardour/mixer_group_tabs.cc
Normal file
146
gtk2_ardour/mixer_group_tabs.cc
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
/*
|
||||
Copyright (C) 2009 Paul Davis
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU 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.
|
||||
|
||||
*/
|
||||
|
||||
#include "ardour/route_group.h"
|
||||
#include "ardour/session.h"
|
||||
#include "mixer_group_tabs.h"
|
||||
#include "mixer_strip.h"
|
||||
#include "mixer_ui.h"
|
||||
#include "utils.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace ARDOUR;
|
||||
|
||||
MixerGroupTabs::MixerGroupTabs (Mixer_UI* m)
|
||||
: _mixer (m)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
MixerGroupTabs::set_session (Session* s)
|
||||
{
|
||||
s->RouteMixGroupChanged.connect (mem_fun (*this, &MixerGroupTabs::set_dirty));
|
||||
}
|
||||
|
||||
|
||||
/** Handle a size request.
|
||||
* @param req GTK requisition
|
||||
*/
|
||||
void
|
||||
MixerGroupTabs::on_size_request (Gtk::Requisition *req)
|
||||
{
|
||||
/* Use a dummy, small width and the actual height that we want */
|
||||
req->width = 16;
|
||||
req->height = 16;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
MixerGroupTabs::render (cairo_t* cr)
|
||||
{
|
||||
/* background */
|
||||
|
||||
cairo_set_source_rgb (cr, 0, 0, 0);
|
||||
cairo_rectangle (cr, 0, 0, _width, _height);
|
||||
cairo_fill (cr);
|
||||
|
||||
int32_t curr_start = 0;
|
||||
RouteGroup* curr_group = 0;
|
||||
Gdk::Color curr_colour;
|
||||
|
||||
int32_t x = 0;
|
||||
for (list<MixerStrip*>::iterator i = _mixer->strips.begin(); i != _mixer->strips.end(); ++i) {
|
||||
|
||||
if ((*i)->route()->is_master() || (*i)->route()->is_control()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
RouteGroup* g = (*i)->mix_group ();
|
||||
|
||||
if (g != curr_group) {
|
||||
if (curr_group) {
|
||||
draw_group (cr, curr_start, x, curr_group, curr_colour);
|
||||
}
|
||||
|
||||
curr_start = x;
|
||||
curr_group = g;
|
||||
curr_colour = (*i)->color ();
|
||||
}
|
||||
|
||||
x += (*i)->get_width ();
|
||||
}
|
||||
|
||||
if (curr_group) {
|
||||
draw_group (cr, curr_start, x, curr_group, curr_colour);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MixerGroupTabs::draw_group (cairo_t* cr, int32_t x1, int32_t x2, RouteGroup* g, Gdk::Color const & colour)
|
||||
{
|
||||
double const arc_radius = _height;
|
||||
|
||||
if (g->is_active()) {
|
||||
cairo_set_source_rgba (cr, colour.get_red_p (), colour.get_green_p (), colour.get_blue_p (), 1);
|
||||
} else {
|
||||
cairo_set_source_rgba (cr, 1, 1, 1, 0.2);
|
||||
}
|
||||
|
||||
cairo_arc (cr, x1 + arc_radius, _height, arc_radius, M_PI, 3 * M_PI / 2);
|
||||
cairo_line_to (cr, x2 - arc_radius, 0);
|
||||
cairo_arc (cr, x2 - arc_radius, _height, arc_radius, 3 * M_PI / 2, 2 * M_PI);
|
||||
cairo_line_to (cr, x1, _height);
|
||||
cairo_fill (cr);
|
||||
|
||||
pair<string, double> const f = fit_to_pixels (cr, g->name(), x2 - x1 - arc_radius * 2);
|
||||
|
||||
cairo_text_extents_t ext;
|
||||
cairo_text_extents (cr, g->name().c_str(), &ext);
|
||||
|
||||
cairo_set_source_rgb (cr, 1, 1, 1);
|
||||
cairo_move_to (cr, x1 + (x2 - x1 - f.second) / 2, _height - ext.height / 2);
|
||||
cairo_save (cr);
|
||||
cairo_show_text (cr, f.first.c_str());
|
||||
cairo_restore (cr);
|
||||
}
|
||||
|
||||
bool
|
||||
MixerGroupTabs::on_button_press_event (GdkEventButton* ev)
|
||||
{
|
||||
int32_t x = 0;
|
||||
list<MixerStrip*>::iterator i = _mixer->strips.begin();
|
||||
while (x < ev->x && i != _mixer->strips.end()) {
|
||||
x += (*i)->get_width ();
|
||||
if (x < ev->x) {
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
if (i == _mixer->strips.end()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
RouteGroup* g = (*i)->mix_group ();
|
||||
if (g) {
|
||||
g->set_active (!g->is_active (), this);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
38
gtk2_ardour/mixer_group_tabs.h
Normal file
38
gtk2_ardour/mixer_group_tabs.h
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
Copyright (C) 2009 Paul Davis
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU 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.
|
||||
|
||||
*/
|
||||
|
||||
#include "cairo_widget.h"
|
||||
|
||||
class Mixer_UI;
|
||||
|
||||
class MixerGroupTabs : public CairoWidget
|
||||
{
|
||||
public:
|
||||
MixerGroupTabs (Mixer_UI *);
|
||||
|
||||
void set_session (ARDOUR::Session *);
|
||||
|
||||
private:
|
||||
void on_size_request (Gtk::Requisition *);
|
||||
bool on_button_press_event (GdkEventButton *);
|
||||
void render (cairo_t *);
|
||||
void draw_group (cairo_t *, int32_t, int32_t, ARDOUR::RouteGroup* , Gdk::Color const &);
|
||||
|
||||
Mixer_UI* _mixer;
|
||||
};
|
||||
|
|
@ -58,6 +58,7 @@
|
|||
#include "io_selector.h"
|
||||
#include "utils.h"
|
||||
#include "gui_thread.h"
|
||||
#include "route_group_dialog.h"
|
||||
|
||||
#include "i18n.h"
|
||||
|
||||
|
|
@ -501,7 +502,7 @@ MixerStrip::set_stuff_from_route ()
|
|||
/* if width is not set, it will be set by the MixerUI or editor */
|
||||
|
||||
if ((prop = xml_node->property ("strip-width")) != 0) {
|
||||
set_width (Width (string_2_enum (prop->value(), _width)), this);
|
||||
set_width_enum (Width (string_2_enum (prop->value(), _width)), this);
|
||||
}
|
||||
|
||||
if ((prop = xml_node->property ("shown-mixer")) != 0) {
|
||||
|
|
@ -517,7 +518,7 @@ MixerStrip::set_stuff_from_route ()
|
|||
}
|
||||
|
||||
void
|
||||
MixerStrip::set_width (Width w, void* owner)
|
||||
MixerStrip::set_width_enum (Width w, void* owner)
|
||||
{
|
||||
/* always set the gpm width again, things may be hidden */
|
||||
|
||||
|
|
@ -952,14 +953,14 @@ void
|
|||
MixerStrip::input_changed (IOChange change, void *src)
|
||||
{
|
||||
Gtkmm2ext::UI::instance()->call_slot (mem_fun(*this, &MixerStrip::update_input_display));
|
||||
set_width(_width, this);
|
||||
set_width_enum (_width, this);
|
||||
}
|
||||
|
||||
void
|
||||
MixerStrip::output_changed (IOChange change, void *src)
|
||||
{
|
||||
Gtkmm2ext::UI::instance()->call_slot (mem_fun(*this, &MixerStrip::update_output_display));
|
||||
set_width(_width, this);
|
||||
set_width_enum (_width, this);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1099,6 +1100,11 @@ MixerStrip::select_mix_group (GdkEventButton *ev)
|
|||
case 1:
|
||||
|
||||
items.clear ();
|
||||
|
||||
items.push_back (MenuElem (_("New group..."), mem_fun (*this, &MixerStrip::set_mix_group_to_new)));
|
||||
|
||||
items.push_back (SeparatorElem ());
|
||||
|
||||
items.push_back (RadioMenuElem (group, _("No group"), bind (mem_fun(*this, &MixerStrip::set_mix_group), (RouteGroup *) 0)));
|
||||
|
||||
_session.foreach_mix_group (bind (mem_fun (*this, &MixerStrip::add_mix_group_to_menu), &group));
|
||||
|
|
@ -1258,10 +1264,10 @@ MixerStrip::width_clicked ()
|
|||
{
|
||||
switch (_width) {
|
||||
case Wide:
|
||||
set_width (Narrow, this);
|
||||
set_width_enum (Narrow, this);
|
||||
break;
|
||||
case Narrow:
|
||||
set_width (Wide, this);
|
||||
set_width_enum (Wide, this);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1408,7 +1414,7 @@ MixerStrip::meter_changed (void *src)
|
|||
gpm.setup_meters ();
|
||||
// reset peak when meter point changes
|
||||
gpm.reset_peak_display();
|
||||
set_width(_width, this);
|
||||
set_width_enum (_width, this);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1477,3 +1483,19 @@ MixerStrip::revert_to_default_display ()
|
|||
panner_ui().setup_pan ();
|
||||
}
|
||||
|
||||
void
|
||||
MixerStrip::set_mix_group_to_new ()
|
||||
{
|
||||
RouteGroup* g = new RouteGroup (_session, "", RouteGroup::Active);
|
||||
g->set_active (true, this);
|
||||
|
||||
RouteGroupDialog d (g);
|
||||
int const r = d.do_run ();
|
||||
|
||||
if (r == Gtk::RESPONSE_OK) {
|
||||
_session.add_mix_group (g);
|
||||
_route->set_mix_group (g, this);
|
||||
} else {
|
||||
delete g;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,9 +84,9 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
|
|||
MixerStrip (Mixer_UI&, ARDOUR::Session&, bool in_mixer = true);
|
||||
~MixerStrip ();
|
||||
|
||||
void set_width (Width, void* owner);
|
||||
Width get_width() const { return _width; }
|
||||
void* width_owner() const { return _width_owner; }
|
||||
void set_width_enum (Width, void* owner);
|
||||
Width get_width_enum () const { return _width; }
|
||||
void* width_owner () const { return _width_owner; }
|
||||
|
||||
GainMeter& gain_meter() { return gpm; }
|
||||
PannerUI& panner_ui() { return panners; }
|
||||
|
|
@ -257,6 +257,8 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
|
|||
boost::shared_ptr<ARDOUR::Delivery> _current_delivery;
|
||||
void revert_to_default_display ();
|
||||
|
||||
void set_mix_group_to_new ();
|
||||
|
||||
static int scrollbar_height;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@
|
|||
#include "utils.h"
|
||||
#include "actions.h"
|
||||
#include "gui_thread.h"
|
||||
#include "mixer_group_tabs.h"
|
||||
|
||||
#include "i18n.h"
|
||||
|
||||
|
|
@ -81,7 +82,13 @@ Mixer_UI::Mixer_UI ()
|
|||
// add as last item of strip packer
|
||||
strip_packer.pack_end (scroller_base, true, true);
|
||||
|
||||
scroller.add (strip_packer);
|
||||
_group_tabs = new MixerGroupTabs (this);
|
||||
VBox* b = manage (new VBox);
|
||||
b->pack_start (*_group_tabs, PACK_SHRINK);
|
||||
b->pack_start (strip_packer);
|
||||
b->show_all ();
|
||||
|
||||
scroller.add (*b);
|
||||
scroller.set_policy (Gtk::POLICY_ALWAYS, Gtk::POLICY_AUTOMATIC);
|
||||
|
||||
track_model = ListStore::create (track_columns);
|
||||
|
|
@ -281,7 +288,7 @@ Mixer_UI::show_window ()
|
|||
|
||||
for (ri = rows.begin(); ri != rows.end(); ++ri) {
|
||||
ms = (*ri)[track_columns.strip];
|
||||
ms->set_width (ms->get_width(), ms->width_owner());
|
||||
ms->set_width_enum (ms->get_width_enum (), ms->width_owner());
|
||||
}
|
||||
}
|
||||
_visible = true;
|
||||
|
|
@ -322,7 +329,7 @@ Mixer_UI::add_strip (RouteList& routes)
|
|||
Config->get_default_narrow_ms() ? _strip_width = Narrow : _strip_width = Wide;
|
||||
|
||||
if (strip->width_owner() != strip) {
|
||||
strip->set_width (_strip_width, this);
|
||||
strip->set_width_enum (_strip_width, this);
|
||||
}
|
||||
|
||||
show_strip (strip);
|
||||
|
|
@ -463,7 +470,6 @@ Mixer_UI::strip_button_release_event (GdkEventButton *ev, MixerStrip *strip)
|
|||
void
|
||||
Mixer_UI::connect_to_session (Session* sess)
|
||||
{
|
||||
|
||||
session = sess;
|
||||
|
||||
XMLNode* node = ARDOUR_UI::instance()->mixer_settings();
|
||||
|
|
@ -481,6 +487,7 @@ Mixer_UI::connect_to_session (Session* sess)
|
|||
session->RouteAdded.connect (mem_fun(*this, &Mixer_UI::add_strip));
|
||||
session->mix_group_added.connect (mem_fun(*this, &Mixer_UI::add_mix_group));
|
||||
session->mix_group_removed.connect (mem_fun(*this, &Mixer_UI::mix_groups_changed));
|
||||
session->config.ParameterChanged.connect (mem_fun (*this, &Mixer_UI::parameter_changed));
|
||||
|
||||
mix_groups_changed ();
|
||||
|
||||
|
|
@ -490,6 +497,8 @@ Mixer_UI::connect_to_session (Session* sess)
|
|||
show_window();
|
||||
}
|
||||
|
||||
_group_tabs->set_session (sess);
|
||||
|
||||
start_updating ();
|
||||
}
|
||||
|
||||
|
|
@ -768,6 +777,8 @@ Mixer_UI::redisplay_track_list ()
|
|||
|
||||
if (auto_rebinding)
|
||||
auto_rebind_midi_controls ();
|
||||
|
||||
_group_tabs->set_dirty ();
|
||||
}
|
||||
|
||||
#ifdef GTKOSX
|
||||
|
|
@ -1296,7 +1307,7 @@ Mixer_UI::set_strip_width (Width w)
|
|||
_strip_width = w;
|
||||
|
||||
for (list<MixerStrip*>::iterator i = strips.begin(); i != strips.end(); ++i) {
|
||||
(*i)->set_width (w, this);
|
||||
(*i)->set_width_enum (w, this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1491,3 +1502,17 @@ Mixer_UI::on_key_press_event (GdkEventKey* ev)
|
|||
{
|
||||
return key_press_focus_accelerator_handler (*this, ev);
|
||||
}
|
||||
|
||||
void
|
||||
Mixer_UI::parameter_changed (string const & p)
|
||||
{
|
||||
if (p == "show-group-tabs") {
|
||||
bool const s = session->config.get_show_group_tabs ();
|
||||
if (s) {
|
||||
_group_tabs->show ();
|
||||
} else {
|
||||
_group_tabs->hide ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ namespace ARDOUR {
|
|||
|
||||
class MixerStrip;
|
||||
class PluginSelector;
|
||||
class MixerGroupTabs;
|
||||
|
||||
class Mixer_UI : public Gtk::Window
|
||||
{
|
||||
|
|
@ -105,6 +106,8 @@ class Mixer_UI : public Gtk::Window
|
|||
Gtk::HBox out_packer;
|
||||
Gtk::HPaned list_hpane;
|
||||
|
||||
MixerGroupTabs* _group_tabs;
|
||||
|
||||
// for restoring window geometry.
|
||||
int m_root_x, m_root_y, m_width, m_height;
|
||||
|
||||
|
|
@ -249,8 +252,12 @@ class Mixer_UI : public Gtk::Window
|
|||
bool strip_redisplay_does_not_sync_order_keys;
|
||||
bool ignore_sync;
|
||||
|
||||
void parameter_changed (std::string const &);
|
||||
|
||||
static const int32_t default_width = 478;
|
||||
static const int32_t default_height = 765;
|
||||
|
||||
friend class MixerGroupTabs;
|
||||
};
|
||||
|
||||
#endif /* __ardour_mixer_ui_h__ */
|
||||
|
|
|
|||
|
|
@ -159,6 +159,7 @@ def build(bld):
|
|||
midi_scroomer.cc
|
||||
midi_streamview.cc
|
||||
midi_time_axis.cc
|
||||
mixer_group_tabs.cc
|
||||
mixer_strip.cc
|
||||
mixer_ui.cc
|
||||
nag.cc
|
||||
|
|
|
|||
|
|
@ -378,6 +378,7 @@ class Session : public PBD::StatefulDestructible, public boost::noncopyable
|
|||
|
||||
sigc::signal<void,RouteList&> RouteAdded;
|
||||
sigc::signal<void> RouteEditGroupChanged;
|
||||
sigc::signal<void> RouteMixGroupChanged;
|
||||
|
||||
void request_roll_at_and_return (nframes_t start, nframes_t return_to);
|
||||
void request_bounded_roll (nframes_t start, nframes_t end);
|
||||
|
|
@ -1489,6 +1490,7 @@ class Session : public PBD::StatefulDestructible, public boost::noncopyable
|
|||
int load_regions (const XMLNode& node);
|
||||
|
||||
void route_edit_group_changed ();
|
||||
void route_mix_group_changed ();
|
||||
|
||||
/* SOURCES */
|
||||
|
||||
|
|
|
|||
|
|
@ -46,4 +46,4 @@ CONFIG_VARIABLE (bool, jack_time_master, "jack-time-master", true)
|
|||
CONFIG_VARIABLE (bool, use_video_sync, "use-video-sync", false)
|
||||
CONFIG_VARIABLE (float, video_pullup, "video-pullup", 0.0f)
|
||||
CONFIG_VARIABLE (bool, show_summary, "show-summary", true)
|
||||
CONFIG_VARIABLE (bool, show_edit_group_tabs, "show-edit-group-tabs", true)
|
||||
CONFIG_VARIABLE (bool, show_group_tabs, "show-group-tabs", true)
|
||||
|
|
|
|||
|
|
@ -2004,7 +2004,6 @@ Route::drop_edit_group (void *src)
|
|||
|
||||
void
|
||||
Route::set_mix_group (RouteGroup *mg, void *src)
|
||||
|
||||
{
|
||||
if (mg == _mix_group) {
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -2083,6 +2083,7 @@ Session::add_routes (RouteList& new_routes, bool save)
|
|||
(*x)->output()->changed.connect (mem_fun (*this, &Session::set_worst_io_latencies_x));
|
||||
(*x)->processors_changed.connect (bind (mem_fun (*this, &Session::update_latency_compensation), false, false));
|
||||
(*x)->edit_group_changed.connect (hide (mem_fun (*this, &Session::route_edit_group_changed)));
|
||||
(*x)->mix_group_changed.connect (hide (mem_fun (*this, &Session::route_mix_group_changed)));
|
||||
|
||||
if ((*x)->is_master()) {
|
||||
_master_out = (*x);
|
||||
|
|
@ -4254,3 +4255,9 @@ Session::route_edit_group_changed ()
|
|||
{
|
||||
RouteEditGroupChanged (); /* EMIT SIGNAL */
|
||||
}
|
||||
|
||||
void
|
||||
Session::route_mix_group_changed ()
|
||||
{
|
||||
RouteMixGroupChanged (); /* EMIT SIGNAL */
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue