initial work on livetrax

This commit is contained in:
Paul Davis 2024-03-20 06:49:18 -06:00
parent ab979bf664
commit 0cf2283f3f
13 changed files with 354 additions and 157 deletions

View file

@ -620,6 +620,18 @@ private:
void primary_clock_value_changed ();
void secondary_clock_value_changed ();
/* LiveTrax */
Gtk::HBox livetrax_top_bar;
Gtk::HBox livetrax_transport_bar;
Gtk::HBox livetrax_meter_bar;
Gtk::HBox livetrax_editor_bar;
Gtk::HBox livetrax_mixer_bar;
TimeInfoBox* livetrax_time_info_box;
ArdourWidgets::ArdourButton* livetrax_multi_out_button;
ArdourWidgets::ArdourButton* livetrax_stereo_out_button;
int livetrax_setup_windows ();
/* menu bar and associated stuff */
Gtk::MenuBar* menu_bar;

View file

@ -36,9 +36,12 @@
#include "ardour/session.h"
#include "ardour/lv2_plugin.h"
#include "ardour/profile.h"
#include "gtkmm2ext/bindings.h"
#include "widgets/ardour_button.h"
#include "actions.h"
#include "ardour_message.h"
#include "ardour_ui.h"
@ -47,6 +50,7 @@
#include "meterbridge.h"
#include "luainstance.h"
#include "luawindow.h"
#include "main_clock.h"
#include "mixer_ui.h"
#include "recorder_ui.h"
#include "trigger_page.h"
@ -54,6 +58,7 @@
#include "keyeditor.h"
#include "rc_option_editor.h"
#include "route_params_ui.h"
#include "selection_properties_box.h"
#include "time_info_box.h"
#include "trigger_ui.h"
#include "step_entry.h"
@ -67,6 +72,7 @@
using namespace Gtk;
using namespace PBD;
using namespace ArdourWidgets;
namespace ARDOUR {
class Session;
@ -130,9 +136,14 @@ ARDOUR_UI::connect_dependents_to_session (ARDOUR::Session *s)
editor->set_session (s);
BootMessage (_("Setup Mixer"));
mixer->set_session (s);
if (!Profile->get_livetrax()) {
recorder->set_session (s);
trigger_page->set_session (s);
meterbridge->set_session (s);
} else {
livetrax_time_info_box->set_session (s);
}
/* its safe to do this now */
@ -249,11 +260,16 @@ tab_window_root_drop (GtkNotebook* src,
int
ARDOUR_UI::setup_windows ()
{
if (ARDOUR::Profile->get_livetrax()) {
return livetrax_setup_windows ();
}
_tabs.set_show_border(false);
_tabs.signal_switch_page().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_switch));
_tabs.signal_page_added().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_page_added));
_tabs.signal_page_removed().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_page_removed));
rc_option_editor = new RCOptionEditor;
rc_option_editor->StateChange.connect (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_state_change));
@ -360,6 +376,102 @@ ARDOUR_UI::setup_windows ()
return 0;
}
int
ARDOUR_UI::livetrax_setup_windows ()
{
ArdourButton::set_default_tweaks (ArdourButton::Tweaks (ArdourButton::ForceBoxy|ArdourButton::ForceFlat));
if (create_editor()) {
error << _("UI: cannot setup editor") << endmsg;
return -1;
}
if (create_mixer()) {
error << _("UI: cannot setup mixer") << endmsg;
return -1;
}
livetrax_time_info_box = new TimeInfoBox ("LiveTraxTimeInfo", false);
Gtk::Label* l;
Gtk::VBox* vb;
livetrax_top_bar.set_spacing (12);
livetrax_top_bar.set_border_width (12);
livetrax_top_bar.pack_start (*livetrax_time_info_box, false, false);
livetrax_top_bar.pack_start (*primary_clock, false, false);
Gtk::EventBox* ev_dsp = manage (new EventBox);
Gtk::EventBox* ev_timecode = manage (new EventBox);
ev_dsp->set_name ("MainMenuBar");
ev_timecode->set_name ("MainMenuBar");
ev_dsp->add (dsp_load_label);
ev_timecode->add (timecode_format_label);
vb = manage (new Gtk::VBox);
vb->pack_start (*ev_dsp, true, true);
vb->pack_start (disk_space_label, true, true);
vb->show_all ();
livetrax_top_bar.pack_end (*vb, false, false);
livetrax_multi_out_button = manage (new ArdourWidgets::ArdourButton (_("Multi Out")));
livetrax_stereo_out_button = manage (new ArdourWidgets::ArdourButton (_("Stereo Out")));
vb = manage (new Gtk::VBox);
vb->pack_start (*livetrax_stereo_out_button, true, true);
vb->pack_start (*livetrax_multi_out_button, true, true);
vb->show_all ();
livetrax_top_bar.pack_end (*vb, false, false);
/* transport bar */
l = new Gtk::Label ("this is the transport bar with other controls too");
livetrax_transport_bar.pack_start (*l, true, true);
/* meter display */
l = new Gtk::Label ("this is the meter display");
livetrax_meter_bar.pack_start (*l, true, true);
livetrax_editor_bar.pack_start (editor->contents(), true, true);
livetrax_mixer_bar.pack_start (mixer->contents(), true, true);
we_have_dependents ();
/* order of addition affects order seen in initial window display */
main_vpacker.pack_start (menu_bar_base, false, false);
main_vpacker.pack_start (livetrax_top_bar, false, false);
main_vpacker.pack_start (livetrax_transport_bar, false, false);
main_vpacker.pack_start (livetrax_meter_bar, false, false);
main_vpacker.pack_start (livetrax_editor_bar, true, true);
main_vpacker.pack_start (livetrax_mixer_bar, true, true);
// setup_tooltips ();
_main_window.signal_delete_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::main_window_delete_event));
/* pack the main vpacker into the main window and show everything
*/
_main_window.add (main_vpacker);
apply_window_settings (true);
setup_toplevel_window (_main_window, "", this);
_main_window.show_all ();
#ifdef GDK_WINDOWING_X11
/* allow externalUIs to be transient, on top of the main window */
LV2Plugin::set_main_window_id (GDK_DRAWABLE_XID(_main_window.get_window()->gobj()));
#endif
return 0;
}
void
ARDOUR_UI::apply_window_settings (bool with_size)
{

View file

@ -156,15 +156,18 @@ ARDOUR_UI::set_session (Session *s)
AutomationWatch::instance().set_session (s);
primary_clock->set_session (s);
if (!Profile->get_livetrax()) {
shuttle_box.set_session (s);
mini_timeline.set_session (s);
time_info_box->set_session (s);
primary_clock->set_session (s);
secondary_clock->set_session (s);
big_clock->set_session (s);
video_timeline->set_session (s);
rc_option_editor->set_session (s);
}
roll_controllable->set_session (s);
stop_controllable->set_session (s);

View file

@ -99,8 +99,10 @@ ARDOUR_UI::create_editor ()
{
try {
editor = new Editor ();
if (!ARDOUR::Profile->get_livetrax()) {
editor->StateChange.connect (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_state_change));
}
}
catch (failed_constructor& err) {
return -1;
@ -116,7 +118,9 @@ ARDOUR_UI::create_recorder ()
{
try {
recorder = new RecorderUI ();
if (!ARDOUR::Profile->get_livetrax()) {
recorder->StateChange.connect (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_state_change));
}
} catch (failed_constructor& err) {
return -1;
}
@ -128,7 +132,9 @@ ARDOUR_UI::create_trigger_page ()
{
try {
trigger_page = new TriggerPage ();
if (!ARDOUR::Profile->get_livetrax()) {
trigger_page->StateChange.connect (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_state_change));
}
} catch (failed_constructor& err) {
return -1;
}
@ -762,19 +768,25 @@ ARDOUR_UI::build_menu_bar ()
ev->set_name ("MainMenuBar");
ev->show ();
EventBox* ev_dsp = manage (new EventBox);
EventBox* ev_dsp;
EventBox* ev_timecode;
EventBox* ev_path = manage (new EventBox);
EventBox* ev_name = manage (new EventBox);
EventBox* ev_audio = manage (new EventBox);
EventBox* ev_format = manage (new EventBox);
EventBox* ev_timecode = manage (new EventBox);
if (!Profile->get_livetrax()) {
ev_dsp = manage (new EventBox);
ev_timecode = manage (new EventBox);
ev_dsp->set_name ("MainMenuBar");
ev_timecode->set_name ("MainMenuBar");
}
ev_path->set_name ("MainMenuBar");
ev_name->set_name ("MainMenuBar");
ev_audio->set_name ("MainMenuBar");
ev_format->set_name ("MainMenuBar");
ev_timecode->set_name ("MainMenuBar");
Gtk::HBox* hbox = manage (new Gtk::HBox);
hbox->show ();
@ -794,18 +806,22 @@ ARDOUR_UI::build_menu_bar ()
snapshot_name_label.set_name ("Name");
format_label.set_use_markup ();
if (!Profile->get_livetrax()) {
ev_dsp->add (dsp_load_label);
ev_timecode->add (timecode_format_label);
}
ev_path->add (session_path_label);
ev_name->add (snapshot_name_label);
ev_audio->add (sample_rate_label);
ev_format->add (format_label);
ev_timecode->add (timecode_format_label);
if (!Profile->get_livetrax()) {
ev_dsp->show ();
ev_timecode->show ();
}
ev_path->show ();
ev_audio->show ();
ev_format->show ();
ev_timecode->show ();
#ifdef __APPLE__
use_menubar_as_top_menubar ();
@ -817,7 +833,9 @@ ARDOUR_UI::build_menu_bar ()
hbox->pack_end (wall_clock_label, false, false, 10);
hbox->pack_end (*ev_dsp, false, false, 6);
if (!Profile->get_livetrax()) {
hbox->pack_end (disk_space_label, false, false, 6);
}
hbox->pack_end (*ev_audio, false, false, 6);
hbox->pack_end (*ev_timecode, false, false, 6);
hbox->pack_end (*ev_format, false, false, 6);
@ -834,10 +852,13 @@ ARDOUR_UI::build_menu_bar ()
_status_bar_visibility.add (&snapshot_name_label ,X_("Name"), _("Snapshot Name and Modified Indicator"), false);
_status_bar_visibility.add (&peak_thread_work_label,X_("Peakfile"), _("Active Peak-file Work"), false);
_status_bar_visibility.add (&format_label, X_("Format"), _("File Format"), false);
_status_bar_visibility.add (&timecode_format_label, X_("TCFormat"), _("Timecode Format"), false);
_status_bar_visibility.add (&sample_rate_label, X_("Audio"), _("Audio"), true);
if (!Profile->get_livetrax()) {
_status_bar_visibility.add (&timecode_format_label, X_("TCFormat"), _("Timecode Format"), false);
_status_bar_visibility.add (&disk_space_label, X_("Disk"), _("Disk Space"), !Profile->get_small_screen());
_status_bar_visibility.add (&dsp_load_label, X_("DSP"), _("DSP"), true);
}
#ifndef __APPLE__
// OSX provides its own wallclock, thank you very much
_status_bar_visibility.add (&wall_clock_label, X_("WallClock"), _("Wall Clock"), false);
@ -845,13 +866,16 @@ ARDOUR_UI::build_menu_bar ()
ev->signal_button_press_event().connect (sigc::mem_fun (_status_bar_visibility, &VisibilityGroup::button_press_event));
if (!Profile->get_livetrax()) {
ev_dsp->signal_button_press_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::xrun_button_press));
ev_dsp->signal_button_release_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::xrun_button_release));
ev_timecode->signal_button_press_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::timecode_button_press));
}
ev_path->signal_button_press_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::path_button_press));
ev_name->signal_button_press_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::path_button_press));
ev_audio->signal_button_press_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::audio_button_press));
ev_format->signal_button_press_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::format_button_press));
ev_timecode->signal_button_press_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::timecode_button_press));
ArdourWidgets::set_tooltip (session_path_label, _("Double click to open session folder."));
ArdourWidgets::set_tooltip (format_label, _("Double click to edit audio file format."));

View file

@ -26,6 +26,8 @@
is to cut down on the nasty compile times for these classes.
*/
#include "ardour/profile.h"
#include "gtkmm2ext/keyboard.h"
#include "actions.h"
@ -44,8 +46,10 @@ ARDOUR_UI::create_mixer ()
{
try {
mixer = Mixer_UI::instance ();
if (!ARDOUR::Profile->get_livetrax()) {
mixer->StateChange.connect (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_state_change));
}
}
catch (failed_constructor& err) {
return -1;

View file

@ -121,6 +121,8 @@ ARDOUR_UI::setup_profile ()
if (g_getenv ("MIXBUS")) {
Profile->set_mixbus ();
}
Profile->set_livetrax ();
}
int

View file

@ -602,7 +602,9 @@ Editor::Editor ()
CairoWidget::set_focus_handler (sigc::mem_fun (ARDOUR_UI::instance(), &ARDOUR_UI::reset_focus));
if (!Profile->get_livetrax()) {
_summary = new EditorSummary (this);
}
TempoMap::MapChanged.connect (tempo_map_connection, invalidator (*this), boost::bind (&Editor::tempo_map_changed, this), gui_context());
@ -732,6 +734,7 @@ Editor::Editor ()
settings->get_property ("notebook-shrunk", _notebook_shrunk);
}
if (!Profile->get_livetrax()) {
editor_summary_pane.set_check_divider_position (true);
editor_summary_pane.add (edit_packer);
@ -784,10 +787,12 @@ Editor::Editor ()
fract = 0.90;
}
editor_summary_pane.set_divider (0, fract);
}
global_vpacker.set_spacing (0);
global_vpacker.set_border_width (0);
if (!Profile->get_livetrax()) {
/* the next three EventBoxes provide the ability for their child widgets to have a background color. That is all. */
Gtk::EventBox* ebox = manage (new Gtk::EventBox); // a themeable box
@ -807,12 +812,14 @@ Editor::Editor ()
toolbar_shadow->set_mode(ArdourWidgets::ArdourDropShadow::DropShadowBoth);
toolbar_shadow->set_name("EditorWindow");
toolbar_shadow->show();
global_vpacker.pack_start (*toolbar_shadow, false, false);
global_vpacker.pack_start (*ebox, false, false);
if (!Profile->get_livetrax()) {
global_vpacker.pack_start (*epane_box, true, true);
global_hpacker.pack_start (*epane_box2, true, true);
}
/* need to show the "contents" widget so that notebook will show if tab is switched to
*/
@ -820,6 +827,12 @@ Editor::Editor ()
ebox_hpacker.show();
ebox->show();
} else {
global_vpacker.pack_start (edit_packer, true, true);
global_hpacker.pack_start (global_vpacker, true, true);
global_hpacker.show ();
}
/* register actions now so that set_state() can find them and set toggles/checks etc */
load_bindings ();
@ -1353,16 +1366,19 @@ Editor::set_session (Session *t)
* before the visible state has been loaded from instant.xml */
_leftmost_sample = session_gui_extents().first.samples();
if (!Profile->get_livetrax()) {
nudge_clock->set_session (_session);
_summary->set_session (_session);
}
_group_tabs->set_session (_session);
_route_groups->set_session (_session);
_regions->set_session (_session);
_sources->set_session (_session);
_snapshots->set_session (_session);
_sections->set_session (_session);
_routes->set_session (_session);
_locations->set_session (_session);
_sections->set_session (_session);
_properties_box->set_session (_session);
if (rhythm_ferret) {
@ -5098,7 +5114,9 @@ Editor::on_samples_per_pixel_changed ()
}
refresh_location_display();
if (_summary) {
_summary->set_overlays_dirty ();
}
update_section_box ();
update_marker_labels ();
@ -5237,8 +5255,10 @@ Editor::visual_changer (const VisualChange& vc)
}
_region_peak_cursor->hide ();
if (_summary) {
_summary->set_overlays_dirty ();
}
}
struct EditorOrderTimeAxisSorter {
bool operator() (const TimeAxisView* a, const TimeAxisView* b) const {
@ -5809,7 +5829,9 @@ Editor::region_view_added (RegionView * rv)
}
}
if (_summary) {
_summary->set_background_dirty ();
}
mark_region_boundary_cache_dirty ();
}
@ -5817,7 +5839,9 @@ Editor::region_view_added (RegionView * rv)
void
Editor::region_view_removed ()
{
if (_summary) {
_summary->set_background_dirty ();
}
mark_region_boundary_cache_dirty ();
}
@ -6216,7 +6240,9 @@ Editor::redisplay_track_views ()
vertical_adjustment.set_value (_full_canvas_height - _visible_canvas_height);
}
if (_summary) {
_summary->set_background_dirty();
}
_group_tabs->set_dirty ();
return false;

View file

@ -632,6 +632,8 @@ public:
void remove_region_marker (ARDOUR::CueMarker&);
void make_region_markers_global (bool as_cd_markers);
SelectionPropertiesBox& properties_box() const { return *_properties_box; }
protected:
void map_transport_state ();
void map_position_change (samplepos_t);

View file

@ -367,8 +367,11 @@ Editor::track_canvas_viewport_size_allocated ()
update_tempo_based_rulers ();
redisplay_grid (false);
redisplay_track_views ();
if (_summary) {
_summary->set_overlays_dirty ();
}
}
void
Editor::reset_controls_layout_width ()

View file

@ -485,7 +485,7 @@ Editor::update_ruler_visibility ()
videotl_label.hide();
#endif
if (ruler_minsec_action->get_active()) {
if (!Profile->get_livetrax() && ruler_minsec_action->get_active()) {
old_unit_pos = minsec_ruler->position().y;
if (tbpos != old_unit_pos) {
minsec_ruler->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
@ -501,7 +501,7 @@ Editor::update_ruler_visibility ()
minsec_label.hide();
}
if (ruler_timecode_action->get_active()) {
if (Profile->get_livetrax() || ruler_timecode_action->get_active()) {
old_unit_pos = timecode_ruler->position().y;
if (tbpos != old_unit_pos) {
timecode_ruler->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
@ -517,7 +517,7 @@ Editor::update_ruler_visibility ()
timecode_label.hide();
}
if (ruler_samples_action->get_active()) {
if (!Profile->get_livetrax() && ruler_samples_action->get_active()) {
old_unit_pos = samples_ruler->position().y;
if (tbpos != old_unit_pos) {
samples_ruler->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
@ -533,7 +533,7 @@ Editor::update_ruler_visibility ()
samples_label.hide();
}
if (ruler_bbt_action->get_active()) {
if (!Profile->get_livetrax() && ruler_bbt_action->get_active()) {
old_unit_pos = bbt_ruler->position().y;
if (tbpos != old_unit_pos) {
bbt_ruler->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
@ -549,7 +549,7 @@ Editor::update_ruler_visibility ()
bbt_label.hide();
}
if (ruler_tempo_action->get_active()) {
if (!Profile->get_livetrax() && ruler_tempo_action->get_active()) {
old_unit_pos = tempo_group->position().y;
if (tbpos != old_unit_pos) {
tempo_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
@ -564,7 +564,7 @@ Editor::update_ruler_visibility ()
tempo_label.hide();
}
if (ruler_meter_action->get_active()) {
if (!Profile->get_livetrax() && ruler_meter_action->get_active()) {
old_unit_pos = meter_group->position().y;
if (tbpos != old_unit_pos) {
meter_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
@ -579,7 +579,7 @@ Editor::update_ruler_visibility ()
meter_label.hide();
}
if (ruler_range_action->get_active()) {
if (!Profile->get_livetrax() && ruler_range_action->get_active()) {
old_unit_pos = range_marker_group->position().y;
if (tbpos != old_unit_pos) {
range_marker_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
@ -597,7 +597,7 @@ Editor::update_ruler_visibility ()
range_mark_label.hide();
}
if (ruler_loop_punch_action->get_active()) {
if (!Profile->get_livetrax() && ruler_loop_punch_action->get_active()) {
old_unit_pos = transport_marker_group->position().y;
if (tbpos != old_unit_pos) {
transport_marker_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
@ -615,7 +615,7 @@ Editor::update_ruler_visibility ()
transport_mark_label.hide();
}
if (ruler_cd_marker_action->get_active()) {
if (!Profile->get_livetrax() && ruler_cd_marker_action->get_active()) {
old_unit_pos = cd_marker_group->position().y;
if (tbpos != old_unit_pos) {
cd_marker_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
@ -637,7 +637,7 @@ Editor::update_ruler_visibility ()
update_marker_display();
}
if (ruler_marker_action->get_active()) {
if (Profile->get_livetrax() || ruler_marker_action->get_active()) {
old_unit_pos = marker_group->position().y;
if (tbpos != old_unit_pos) {
marker_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
@ -655,7 +655,7 @@ Editor::update_ruler_visibility ()
mark_label.hide();
}
if (ruler_cue_marker_action->get_active()) {
if (!Profile->get_livetrax() && ruler_cue_marker_action->get_active()) {
old_unit_pos = cue_marker_group->position().y;
if (tbpos != old_unit_pos) {
cue_marker_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
@ -673,7 +673,7 @@ Editor::update_ruler_visibility ()
cue_mark_label.hide();
}
if (ruler_section_action->get_active()) {
if (!Profile->get_livetrax() && ruler_section_action->get_active()) {
old_unit_pos = section_marker_group->position().y;
if (tbpos != old_unit_pos) {
section_marker_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
@ -693,7 +693,7 @@ Editor::update_ruler_visibility ()
update_marker_display();
}
if (ruler_video_action->get_active()) {
if (!Profile->get_livetrax() && ruler_video_action->get_active()) {
old_unit_pos = videotl_group->position().y;
if (tbpos != old_unit_pos) {
videotl_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));

View file

@ -56,6 +56,7 @@
#include "ardour/monitor_control.h"
#include "ardour/panner_shell.h"
#include "ardour/plugin_manager.h"
#include "ardour/profile.h"
#include "ardour/route_group.h"
#include "ardour/selection.h"
#include "ardour/session.h"
@ -330,6 +331,7 @@ Mixer_UI::Mixer_UI ()
}
_mixer_scene_vbox.pack_start(_mixer_scene_table, false, false);
if (!Profile->get_livetrax()) {
rhs_pane1.add (favorite_plugins_frame);
rhs_pane1.add (track_display_frame);
@ -338,6 +340,7 @@ Mixer_UI::Mixer_UI ()
list_vpacker.pack_start (rhs_pane2, true, true);
//add a spacer; this fills the area that is normally taken by the pane resizers
_mixer_scene_spacer.set_size_request (-1, 6);
list_vpacker.pack_start (_mixer_scene_spacer, false, false);
@ -381,6 +384,9 @@ Mixer_UI::Mixer_UI ()
inner_pane.set_drag_cursor (*PublicEditor::instance().cursors()->expand_left_right);
_content.pack_start (list_hpane, true, true);
} else {
_content.pack_start (scroller, true, true);
}
update_title ();
@ -2293,7 +2299,7 @@ Mixer_UI::toggle_mixer_list ()
void
Mixer_UI::showhide_mixer_list (bool yn)
{
if (yn) {
if (!Profile->get_livetrax() && yn) {
list_vpacker.show ();
} else {
list_vpacker.hide ();

View file

@ -105,6 +105,7 @@ class TempoMarker;
class TimeAxisView;
class VerboseCursor;
struct SelectionRect;
class SelectionPropertiesBox;
class DisplaySuspender;
@ -600,6 +601,8 @@ public:
Gtkmm2ext::Bindings* bindings;
virtual SelectionPropertiesBox& properties_box() const = 0;
protected:
friend class DisplaySuspender;
virtual void suspend_route_redisplay () = 0;

View file

@ -175,7 +175,7 @@ SelectionPropertiesBox::selection_changed ()
_header_label.hide();
if (!selection.time.empty()) {
if (Profile->get_livetrax() || !selection.time.empty()) {
_time_info_box->show();
_header_label.set_text(_("Range Properties (Press ESC to Deselect All)"));
_header_label.show();