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);
recorder->set_session (s);
trigger_page->set_session (s);
meterbridge->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);
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);
if (!Profile->get_livetrax()) {
shuttle_box.set_session (s);
mini_timeline.set_session (s);
time_info_box->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,7 +99,9 @@ ARDOUR_UI::create_editor ()
{
try {
editor = new Editor ();
editor->StateChange.connect (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_state_change));
if (!ARDOUR::Profile->get_livetrax()) {
editor->StateChange.connect (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_state_change));
}
}
catch (failed_constructor& err) {
@ -116,7 +118,9 @@ ARDOUR_UI::create_recorder ()
{
try {
recorder = new RecorderUI ();
recorder->StateChange.connect (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_state_change));
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 ();
trigger_page->StateChange.connect (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_state_change));
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);
ev_dsp->set_name ("MainMenuBar");
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 ();
ev_dsp->add (dsp_load_label);
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);
ev_dsp->show ();
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);
hbox->pack_end (disk_space_label, 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);
_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);
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));
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));
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,7 +46,9 @@ ARDOUR_UI::create_mixer ()
{
try {
mixer = Mixer_UI::instance ();
mixer->StateChange.connect (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_state_change));
if (!ARDOUR::Profile->get_livetrax()) {
mixer->StateChange.connect (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_state_change));
}
}
catch (failed_constructor& err) {

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));
_summary = new EditorSummary (this);
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,93 +734,104 @@ Editor::Editor ()
settings->get_property ("notebook-shrunk", _notebook_shrunk);
}
editor_summary_pane.set_check_divider_position (true);
editor_summary_pane.add (edit_packer);
if (!Profile->get_livetrax()) {
editor_summary_pane.set_check_divider_position (true);
editor_summary_pane.add (edit_packer);
Button* summary_arrow_left = manage (new Button);
summary_arrow_left->add (*manage (new Arrow (ARROW_LEFT, SHADOW_NONE)));
summary_arrow_left->signal_pressed().connect (sigc::hide_return (sigc::bind (sigc::mem_fun (*this, &Editor::scroll_press), LEFT)));
summary_arrow_left->signal_released().connect (sigc::mem_fun (*this, &Editor::scroll_release));
Button* summary_arrow_left = manage (new Button);
summary_arrow_left->add (*manage (new Arrow (ARROW_LEFT, SHADOW_NONE)));
summary_arrow_left->signal_pressed().connect (sigc::hide_return (sigc::bind (sigc::mem_fun (*this, &Editor::scroll_press), LEFT)));
summary_arrow_left->signal_released().connect (sigc::mem_fun (*this, &Editor::scroll_release));
Button* summary_arrow_right = manage (new Button);
summary_arrow_right->add (*manage (new Arrow (ARROW_RIGHT, SHADOW_NONE)));
summary_arrow_right->signal_pressed().connect (sigc::hide_return (sigc::bind (sigc::mem_fun (*this, &Editor::scroll_press), RIGHT)));
summary_arrow_right->signal_released().connect (sigc::mem_fun (*this, &Editor::scroll_release));
Button* summary_arrow_right = manage (new Button);
summary_arrow_right->add (*manage (new Arrow (ARROW_RIGHT, SHADOW_NONE)));
summary_arrow_right->signal_pressed().connect (sigc::hide_return (sigc::bind (sigc::mem_fun (*this, &Editor::scroll_press), RIGHT)));
summary_arrow_right->signal_released().connect (sigc::mem_fun (*this, &Editor::scroll_release));
VBox* summary_arrows_left = manage (new VBox);
summary_arrows_left->pack_start (*summary_arrow_left);
VBox* summary_arrows_left = manage (new VBox);
summary_arrows_left->pack_start (*summary_arrow_left);
VBox* summary_arrows_right = manage (new VBox);
summary_arrows_right->pack_start (*summary_arrow_right);
VBox* summary_arrows_right = manage (new VBox);
summary_arrows_right->pack_start (*summary_arrow_right);
Gtk::Frame* summary_frame = manage (new Gtk::Frame);
summary_frame->set_shadow_type (Gtk::SHADOW_ETCHED_IN);
Gtk::Frame* summary_frame = manage (new Gtk::Frame);
summary_frame->set_shadow_type (Gtk::SHADOW_ETCHED_IN);
summary_frame->add (*_summary);
summary_frame->show ();
summary_frame->add (*_summary);
summary_frame->show ();
_summary_hbox.pack_start (*summary_arrows_left, false, false);
_summary_hbox.pack_start (*summary_frame, true, true);
_summary_hbox.pack_start (*summary_arrows_right, false, false);
_summary_hbox.pack_start (*summary_arrows_left, false, false);
_summary_hbox.pack_start (*summary_frame, true, true);
_summary_hbox.pack_start (*summary_arrows_right, false, false);
editor_summary_pane.add (_summary_hbox);
edit_pane.set_check_divider_position (true);
edit_pane.add (editor_summary_pane);
_editor_list_vbox.pack_start (_the_notebook);
_editor_list_vbox.pack_start (*_properties_box, false, false, 0);
edit_pane.add (_editor_list_vbox);
edit_pane.set_child_minsize (_editor_list_vbox, 30); /* rough guess at width of notebook tabs */
editor_summary_pane.add (_summary_hbox);
edit_pane.set_check_divider_position (true);
edit_pane.add (editor_summary_pane);
_editor_list_vbox.pack_start (_the_notebook);
_editor_list_vbox.pack_start (*_properties_box, false, false, 0);
edit_pane.add (_editor_list_vbox);
edit_pane.set_child_minsize (_editor_list_vbox, 30); /* rough guess at width of notebook tabs */
edit_pane.set_drag_cursor (*_cursors->expand_left_right);
editor_summary_pane.set_drag_cursor (*_cursors->expand_up_down);
edit_pane.set_drag_cursor (*_cursors->expand_left_right);
editor_summary_pane.set_drag_cursor (*_cursors->expand_up_down);
float fract;
if (!settings || !settings->get_property ("edit-horizontal-pane-pos", fract) || fract > 1.0) {
/* initial allocation is 90% to canvas, 10% to notebook */
fract = 0.90;
float fract;
if (!settings || !settings->get_property ("edit-horizontal-pane-pos", fract) || fract > 1.0) {
/* initial allocation is 90% to canvas, 10% to notebook */
fract = 0.90;
}
edit_pane.set_divider (0, fract);
if (!settings || !settings->get_property ("edit-vertical-pane-pos", fract) || fract > 1.0) {
/* initial allocation is 90% to canvas, 10% to summary */
fract = 0.90;
}
editor_summary_pane.set_divider (0, fract);
}
edit_pane.set_divider (0, fract);
if (!settings || !settings->get_property ("edit-vertical-pane-pos", fract) || fract > 1.0) {
/* initial allocation is 90% to canvas, 10% to summary */
fract = 0.90;
}
editor_summary_pane.set_divider (0, fract);
global_vpacker.set_spacing (0);
global_vpacker.set_border_width (0);
/* the next three EventBoxes provide the ability for their child widgets to have a background color. That is all. */
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
ebox->set_name("EditorWindow");
ebox->add (ebox_hpacker);
Gtk::EventBox* ebox = manage (new Gtk::EventBox); // a themeable box
ebox->set_name("EditorWindow");
ebox->add (ebox_hpacker);
Gtk::EventBox* epane_box = manage (new EventBoxExt); // a themeable box
epane_box->set_name("EditorWindow");
epane_box->add (edit_pane);
Gtk::EventBox* epane_box = manage (new EventBoxExt); // a themeable box
epane_box->set_name("EditorWindow");
epane_box->add (edit_pane);
Gtk::EventBox* epane_box2 = manage (new EventBoxExt); // a themeable box
epane_box2->set_name("EditorWindow");
epane_box2->add (global_vpacker);
Gtk::EventBox* epane_box2 = manage (new EventBoxExt); // a themeable box
epane_box2->set_name("EditorWindow");
epane_box2->add (global_vpacker);
ArdourWidgets::ArdourDropShadow *toolbar_shadow = manage (new (ArdourWidgets::ArdourDropShadow));
toolbar_shadow->set_size_request (-1, 4);
toolbar_shadow->set_mode(ArdourWidgets::ArdourDropShadow::DropShadowBoth);
toolbar_shadow->set_name("EditorWindow");
toolbar_shadow->show();
ArdourWidgets::ArdourDropShadow *toolbar_shadow = manage (new (ArdourWidgets::ArdourDropShadow));
toolbar_shadow->set_size_request (-1, 4);
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 (*toolbar_shadow, false, false);
global_vpacker.pack_start (*ebox, false, false);
global_vpacker.pack_start (*epane_box, true, true);
global_hpacker.pack_start (*epane_box2, true, true);
global_vpacker.pack_start (*ebox, false, false);
/* need to show the "contents" widget so that notebook will show if tab is switched to
*/
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
*/
global_hpacker.show ();
ebox_hpacker.show();
ebox->show();
global_hpacker.show ();
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 */
@ -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();
nudge_clock->set_session (_session);
_summary->set_session (_session);
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();
_summary->set_overlays_dirty ();
if (_summary) {
_summary->set_overlays_dirty ();
}
update_section_box ();
update_marker_labels ();
@ -5237,7 +5255,9 @@ Editor::visual_changer (const VisualChange& vc)
}
_region_peak_cursor->hide ();
_summary->set_overlays_dirty ();
if (_summary) {
_summary->set_overlays_dirty ();
}
}
struct EditorOrderTimeAxisSorter {
@ -5809,7 +5829,9 @@ Editor::region_view_added (RegionView * rv)
}
}
_summary->set_background_dirty ();
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 ()
{
_summary->set_background_dirty ();
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);
}
_summary->set_background_dirty();
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,7 +367,10 @@ Editor::track_canvas_viewport_size_allocated ()
update_tempo_based_rulers ();
redisplay_grid (false);
redisplay_track_views ();
_summary->set_overlays_dirty ();
if (_summary) {
_summary->set_overlays_dirty ();
}
}
void

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,57 +331,62 @@ Mixer_UI::Mixer_UI ()
}
_mixer_scene_vbox.pack_start(_mixer_scene_table, false, false);
rhs_pane1.add (favorite_plugins_frame);
rhs_pane1.add (track_display_frame);
if (!Profile->get_livetrax()) {
rhs_pane1.add (favorite_plugins_frame);
rhs_pane1.add (track_display_frame);
rhs_pane2.add (rhs_pane1);
rhs_pane2.add (group_display_frame);
rhs_pane2.add (rhs_pane1);
rhs_pane2.add (group_display_frame);
list_vpacker.pack_start (rhs_pane2, true, true);
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);
_mixer_scene_frame.add(_mixer_scene_vbox);
list_vpacker.pack_start (_mixer_scene_frame, false, false);
//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);
vca_label_bar.set_size_request (-1, 16 + 1); /* must match height in GroupTabs::set_size_request() + 1 border px*/
vca_vpacker.pack_start (vca_label_bar, false, false);
_mixer_scene_frame.add(_mixer_scene_vbox);
list_vpacker.pack_start (_mixer_scene_frame, false, false);
vca_scroller_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
vca_scroller_base.set_name (X_("MixerWindow"));
vca_scroller_base.signal_button_press_event().connect (sigc::mem_fun(*this, &Mixer_UI::strip_scroller_button_event));
vca_scroller_base.signal_button_release_event().connect (sigc::mem_fun(*this, &Mixer_UI::strip_scroller_button_event));
vca_label_bar.set_size_request (-1, 16 + 1); /* must match height in GroupTabs::set_size_request() + 1 border px*/
vca_vpacker.pack_start (vca_label_bar, false, false);
vca_hpacker.signal_scroll_event().connect (sigc::mem_fun (*this, &Mixer_UI::on_vca_scroll_event), false);
vca_scroller.add (vca_hpacker);
vca_scroller.set_policy (Gtk::POLICY_ALWAYS, Gtk::POLICY_AUTOMATIC);
vca_scroller_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
vca_scroller_base.set_name (X_("MixerWindow"));
vca_scroller_base.signal_button_press_event().connect (sigc::mem_fun(*this, &Mixer_UI::strip_scroller_button_event));
vca_scroller_base.signal_button_release_event().connect (sigc::mem_fun(*this, &Mixer_UI::strip_scroller_button_event));
vca_vpacker.pack_start (vca_scroller, true, true);
vca_hpacker.signal_scroll_event().connect (sigc::mem_fun (*this, &Mixer_UI::on_vca_scroll_event), false);
vca_scroller.add (vca_hpacker);
vca_scroller.set_policy (Gtk::POLICY_ALWAYS, Gtk::POLICY_AUTOMATIC);
inner_pane.add (scroller);
inner_pane.add (vca_vpacker);
vca_vpacker.pack_start (vca_scroller, true, true);
global_hpacker.pack_start (inner_pane, true, true);
global_hpacker.pack_start (out_packer, false, false);
inner_pane.add (scroller);
inner_pane.add (vca_vpacker);
list_hpane.set_check_divider_position (true);
list_hpane.add (list_vpacker);
list_hpane.add (global_hpacker);
list_hpane.set_child_minsize (list_vpacker, 30);
global_hpacker.pack_start (inner_pane, true, true);
global_hpacker.pack_start (out_packer, false, false);
rhs_pane1.set_divider (0, .6);
rhs_pane2.set_divider (0, .7);
list_hpane.set_divider (0, .2);
inner_pane.set_divider (0, .8);
list_hpane.set_check_divider_position (true);
list_hpane.add (list_vpacker);
list_hpane.add (global_hpacker);
list_hpane.set_child_minsize (list_vpacker, 30);
rhs_pane1.set_drag_cursor (*PublicEditor::instance().cursors()->expand_up_down);
rhs_pane2.set_drag_cursor (*PublicEditor::instance().cursors()->expand_up_down);
list_hpane.set_drag_cursor (*PublicEditor::instance().cursors()->expand_left_right);
inner_pane.set_drag_cursor (*PublicEditor::instance().cursors()->expand_left_right);
rhs_pane1.set_divider (0, .6);
rhs_pane2.set_divider (0, .7);
list_hpane.set_divider (0, .2);
inner_pane.set_divider (0, .8);
_content.pack_start (list_hpane, true, true);
rhs_pane1.set_drag_cursor (*PublicEditor::instance().cursors()->expand_up_down);
rhs_pane2.set_drag_cursor (*PublicEditor::instance().cursors()->expand_up_down);
list_hpane.set_drag_cursor (*PublicEditor::instance().cursors()->expand_left_right);
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();