Add 'delta edit cursor' option to primary and secondary clocks. When in this mode, the clocks display the absolute difference between the playhead and the edit cursor

git-svn-id: svn://localhost/ardour2/trunk@1838 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Doug McLain
2007-05-14 02:48:28 +00:00
parent 90f3128d73
commit 9383499ce6
11 changed files with 84 additions and 14 deletions

View File

@@ -105,6 +105,6 @@ cTrimHandleLockedStart 0.92 0.06 0.06 0.16
cTrimHandleLockedEnd 0.92 0.06 0.06 0.16
cTrimHandleStart 0.10 0.00 1.00 0.27
cTrimHandleEnd 0.10 0.00 1.00 0.27
cEditCursor 0.00 0.00 1.00 1.00
cPlayHead 1.00 0.00 0.00 1.00
cPlayHead 1.00 0.00 0.00 1.00
cEditCursor 0.00 0.00 1.00 1.00

View File

@@ -354,6 +354,9 @@
<menuitem action='StopTransportAtEndOfSession'/>
<menuitem action='GainReduceFastTransport'/>
<separator/>
<menuitem action='PrimaryClockDeltaEditCursor'/>
<menuitem action='SecondaryClockDeltaEditCursor'/>
<separator/>
</menu>
<menu name='Help' action='Help'>
<menuitem action='About'/>

View File

@@ -85,6 +85,7 @@ style "time_axis_view_item_name"
style "default_base" = "medium_text"
{
GtkWidget::cursor_color = {1.0, 1.0, 1.0 }
GtkButton::default_border = { 0, 0, 0, 0 }
GtkButton::default_outside_border = { 0, 0, 0, 0 }
@@ -144,7 +145,7 @@ style "transport_base" = "medium_bold_text"
/*
style "black_mackie_menu_bar"
{
font_name = "sans bold 9"
font_name = "sans bold 8"
fg[NORMAL] = { 1.0, 1.0, 1.0 }
bg[NORMAL] = { 0, 0, 0 }
}
@@ -664,6 +665,11 @@ style "transport_clock_display"
bg[ACTIVE] = { 0.0, 0.0, 0.0 }
}
style "transport_clock_display_delta" = "transport_clock_display"
{
fg[NORMAL] = { 0.30, 0.30, 1.0 }
}
style "tempo_meter_clock_display"
{
font_name = "sans 7"
@@ -1282,6 +1288,8 @@ widget "*BigClockNonRecording" style:highest "non_recording_big_clock_display"
widget "*BigClockRecording" style:highest "recording_big_clock_display"
widget "*TransportClockDisplay" style:highest "transport_clock_display"
widget "*SecondaryClockDisplay" style:highest "transport_clock_display"
widget "*TransportClockDisplayDelta" style:highest "transport_clock_display_delta"
widget "*SecondaryClockDisplayDelta" style:highest "transport_clock_display_delta"
widget "*AudioClockFramesUpperInfo" style:highest "tempo_meter_clock_display"
widget "*AudioClockFramesLowerInfo" style:highest "tempo_meter_clock_display"
widget "*AudioClockSMPTEUpperInfo" style:highest "tempo_meter_clock_display"

View File

@@ -94,7 +94,7 @@ ARDOUR_UI *ARDOUR_UI::theArdourUI = 0;
sigc::signal<void,bool> ARDOUR_UI::Blink;
sigc::signal<void> ARDOUR_UI::RapidScreenUpdate;
sigc::signal<void> ARDOUR_UI::SuperRapidScreenUpdate;
sigc::signal<void,nframes_t> ARDOUR_UI::Clock;
sigc::signal<void,nframes_t, bool, nframes_t> ARDOUR_UI::Clock;
ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
@@ -1520,7 +1520,7 @@ void
ARDOUR_UI::update_clocks ()
{
if (!editor || !editor->dragging_playhead()) {
Clock (session->audible_frame()); /* EMIT_SIGNAL */
Clock (session->audible_frame(), false, editor->edit_cursor_position(false)); /* EMIT_SIGNAL */
}
}
@@ -2654,8 +2654,17 @@ ARDOUR_UI::use_config ()
void
ARDOUR_UI::update_transport_clocks (nframes_t pos)
{
primary_clock.set (pos);
secondary_clock.set (pos);
if (Config->get_primary_clock_delta_edit_cursor()) {
primary_clock.set (pos, false, editor->edit_cursor_position(false), 1);
} else {
primary_clock.set (pos, 0, true);
}
if (Config->get_secondary_clock_delta_edit_cursor()) {
secondary_clock.set (pos, false, editor->edit_cursor_position(false), 2);
} else {
secondary_clock.set (pos);
}
if (big_clock_window) {
big_clock.set (pos);

View File

@@ -156,7 +156,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
static sigc::signal<void,bool> Blink;
static sigc::signal<void> RapidScreenUpdate;
static sigc::signal<void> SuperRapidScreenUpdate;
static sigc::signal<void,nframes_t> Clock;
static sigc::signal<void,nframes_t, bool, nframes_t> Clock;
/* this is a helper function to centralize the (complex) logic for
blinking rec-enable buttons.
@@ -690,6 +690,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void toggle_ShowSoloMutes();
void toggle_LatchedRecordEnable ();
void toggle_RegionEquivalentsOverlap ();
void toggle_PrimaryClockDeltaEditCursor ();
void toggle_SecondaryClockDeltaEditCursor ();
void mtc_port_changed ();
void map_solo_model ();

View File

@@ -271,8 +271,8 @@ ARDOUR_UI::setup_transport ()
/* clocks, etc. */
ARDOUR_UI::Clock.connect (bind (mem_fun (primary_clock, &AudioClock::set), false));
ARDOUR_UI::Clock.connect (bind (mem_fun (secondary_clock, &AudioClock::set), false));
ARDOUR_UI::Clock.connect (bind (mem_fun (primary_clock, &AudioClock::set), 1));
ARDOUR_UI::Clock.connect (bind (mem_fun (secondary_clock, &AudioClock::set), 2));
primary_clock.ValueChanged.connect (mem_fun(*this, &ARDOUR_UI::primary_clock_value_changed));
secondary_clock.ValueChanged.connect (mem_fun(*this, &ARDOUR_UI::secondary_clock_value_changed));

View File

@@ -412,6 +412,8 @@ ARDOUR_UI::install_actions ()
ActionManager::register_toggle_action (option_actions, X_("GainReduceFastTransport"), _("-12dB gain reduce ffwd/rewind"), mem_fun (*this, &ARDOUR_UI::toggle_GainReduceFastTransport));
ActionManager::register_toggle_action (option_actions, X_("LatchedRecordEnable"), _("Rec-enable stays engaged at stop"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedRecordEnable));
ActionManager::register_toggle_action (option_actions, X_("RegionEquivalentsOverlap"), _("Region equivalents overlap"), mem_fun (*this, &ARDOUR_UI::toggle_RegionEquivalentsOverlap));
ActionManager::register_toggle_action (option_actions, X_("PrimaryClockDeltaEditCursor"), _("Primary Clock delta to edit cursor"), mem_fun (*this, &ARDOUR_UI::toggle_PrimaryClockDeltaEditCursor));
ActionManager::register_toggle_action (option_actions, X_("SecondaryClockDeltaEditCursor"), _("Secondary Clock delta to edit cursor"), mem_fun (*this, &ARDOUR_UI::toggle_SecondaryClockDeltaEditCursor));
act = ActionManager::register_toggle_action (option_actions, X_("DoNotRunPluginsWhileRecording"), _("Do not run plugins while recording"), mem_fun (*this, &ARDOUR_UI::toggle_DoNotRunPluginsWhileRecording));
ActionManager::session_sensitive_actions.push_back (act);

View File

@@ -434,6 +434,18 @@ ARDOUR_UI::toggle_ShowSoloMutes()
ActionManager::toggle_config_state ("options", "ShowSoloMutes", &Configuration::set_show_solo_mutes, &Configuration::get_show_solo_mutes);
}
void
ARDOUR_UI::toggle_PrimaryClockDeltaEditCursor()
{
ActionManager::toggle_config_state ("options", "PrimaryClockDeltaEditCursor", &Configuration::set_primary_clock_delta_edit_cursor, &Configuration::get_primary_clock_delta_edit_cursor);
}
void
ARDOUR_UI::toggle_SecondaryClockDeltaEditCursor()
{
ActionManager::toggle_config_state ("options", "SecondaryClockDeltaEditCursor", &Configuration::set_secondary_clock_delta_edit_cursor, &Configuration::get_secondary_clock_delta_edit_cursor);
}
void
ARDOUR_UI::mtc_port_changed ()
{
@@ -962,7 +974,11 @@ ARDOUR_UI::parameter_changed (const char* parameter_name)
}
} else if (PARAM_IS ("use-overlap-equivalency")) {
ActionManager::map_some_state ("options", "RegionEquivalentsOverlap", &Configuration::get_use_overlap_equivalency);
}
} else if (PARAM_IS ("primary-clock-delta-edit-cursor")) {
ActionManager::map_some_state ("options", "PrimaryClockDeltaEditCursor", &Configuration::get_primary_clock_delta_edit_cursor);
} else if (PARAM_IS ("secondary-clock-delta-edit-cursor")) {
ActionManager::map_some_state ("options", "SecondaryClockDeltaEditCursor", &Configuration::get_secondary_clock_delta_edit_cursor);
}
#undef PARAM_IS

View File

@@ -77,6 +77,8 @@ AudioClock::AudioClock (std::string clock_name, bool transient, std::string widg
{
session = 0;
last_when = 0;
last_pdelta = 0;
last_sdelta = 0;
key_entry_state = 0;
ops_menu = 0;
dragging = false;
@@ -383,17 +385,41 @@ AudioClock::on_realize ()
}
void
AudioClock::set (nframes_t when, bool force)
AudioClock::set (nframes_t when, bool force, nframes_t offset, int which)
{
if ((!force && !is_visible()) || session == 0) {
return;
}
if (when == last_when && !force) {
if (when == last_when && !offset && !force) {
return;
}
bool pdelta = Config->get_primary_clock_delta_edit_cursor();
bool sdelta = Config->get_secondary_clock_delta_edit_cursor();
if (offset && which == 1 && pdelta) {
when = (when > offset) ? when - offset : offset - when;
} else if (offset && which == 2 && sdelta) {
when = (when > offset) ? when - offset : offset - when;
}
if (which == 1 && pdelta && !last_pdelta) {
cout << "set_widget_name() called" << endl;
set_widget_name("TransportClockDisplayDelta");
last_pdelta = true;
} else if (which == 1 && !pdelta && last_pdelta) {
set_widget_name("TransportClockDisplay");
last_pdelta = false;
} else if (which == 2 && sdelta && !last_sdelta) {
set_widget_name("SecondaryClockDisplayDelta");
last_sdelta = true;
} else if (which == 2 && !sdelta && last_sdelta) {
set_widget_name("SecondaryClockDisplay");
last_sdelta = false;
}
switch (_mode) {
case SMPTE:
set_smpte (when, force);

View File

@@ -46,7 +46,7 @@ class AudioClock : public Gtk::HBox
Mode mode() const { return _mode; }
void set (nframes_t, bool force = false);
void set (nframes_t, bool force = false, nframes_t offset = 0, int which = 0);
void set_mode (Mode);
void set_widget_name (std::string);
@@ -149,6 +149,8 @@ class AudioClock : public Gtk::HBox
Gtk::Frame clock_frame;
nframes_t last_when;
bool last_pdelta;
bool last_sdelta;
uint32_t last_hrs;
uint32_t last_mins;

View File

@@ -112,6 +112,8 @@ CONFIG_VARIABLE (SlaveSource, slave_source, "slave-source", None)
CONFIG_VARIABLE (ShuttleBehaviour, shuttle_behaviour, "shuttle-behaviour", Sprung)
CONFIG_VARIABLE (ShuttleUnits, shuttle_units, "shuttle-units", Percentage)
CONFIG_VARIABLE (bool, quieten_at_speed, "quieten-at-speed", true)
CONFIG_VARIABLE (bool, primary_clock_delta_edit_cursor, "primary-clock-delta-edit-cursor", false)
CONFIG_VARIABLE (bool, secondary_clock_delta_edit_cursor, "secondary-clock-delta-edit-cursor", false)
/* timecode and sync */