#include "ardour/profile.h"
#include "ardour/lmath.h"
#include "ardour/session.h"
-#include "ardour/slave.h"
+#include "ardour/transport_master.h"
#include "ardour/tempo.h"
+#include "ardour/transport_master_manager.h"
#include "ardour/types.h"
#include "ardour_ui.h"
_mode = BBT; /* lie to force mode switch */
set_mode (Timecode);
- set (last_when, true);
+ AudioClock::set (last_when, true);
if (!is_transient) {
clocks.push_back (this);
tmp->get_pixel_size (em_width, ignore_height);
/* force redraw of markup with new font-size */
- set (last_when, true);
+ AudioClock::set (last_when, true);
}
void
break;
case Seconds:
- // no break
+ /* fall through */
case Samples:
if (edit_string.length() < 1) {
edit_string = pre_edit_string;
break;
}
- set (pos, true);
+ AudioClock::set (pos, true);
_layout->set_attributes (normal_attributes);
ValueChanged(); /* EMIT_SIGNAL */
}
if (samples != 0) {
if (add) {
- set (current_time() + samples, true);
+ AudioClock::set (current_time() + samples, true);
} else {
samplepos_t c = current_time();
if (c > samples || _negative_allowed) {
- set (c - samples, true);
+ AudioClock::set (c - samples, true);
} else {
- set (0, true);
+ AudioClock::set (0, true);
}
}
ValueChanged (); /* EMIT SIGNAL */
void
AudioClock::session_property_changed (const PropertyChange&)
{
- set (last_when, true);
+ AudioClock::set (last_when, true);
}
void
}
if (p == "sync-source" || p == "external-sync") {
- set (current_time(), true);
+ AudioClock::set (current_time(), true);
return;
}
} else {
current = current_time ();
}
- set (current, true);
+ AudioClock::set (current, true);
break;
default:
break;
return;
}
+ _offset = offset;
if (is_duration) {
when = when - offset;
}
return;
}
- SyncSource sync_src = Config->get_sync_source();
+ boost::shared_ptr<TransportMaster> tm = TransportMasterManager::instance().current();
- if (_session->config.get_external_sync()) {
- Slave* slave = _session->slave();
+ if (_session->transport_master_is_external()) {
- switch (sync_src) {
+ switch (tm->type()) {
case Engine:
- _left_btn.set_text (sync_source_to_string (sync_src, true), true);
+ _left_btn.set_text (tm->name(), true);
_right_btn.set_text ("", true);
break;
case MIDIClock:
- if (slave) {
- _left_btn.set_text (sync_source_to_string (sync_src, true), true);
- _right_btn.set_text (slave->approximate_current_delta (), true);
+ if (tm) {
+ _left_btn.set_text (tm->display_name(), true);
+ _right_btn.set_text (tm->delta_string (), true);
} else {
_left_btn.set_text (_("--pending--"), true);
_right_btn.set_text ("", true);
break;
case LTC:
case MTC:
- if (slave) {
+ if (tm) {
bool matching;
- TimecodeSlave* tcslave;
- if ((tcslave = dynamic_cast<TimecodeSlave*>(_session->slave())) != 0) {
- matching = (tcslave->apparent_timecode_format() == _session->config.get_timecode_format());
+ boost::shared_ptr<TimecodeTransportMaster> tcmaster;
+ if ((tcmaster = boost::dynamic_pointer_cast<TimecodeTransportMaster>(tm)) != 0) {
+ matching = (tcmaster->apparent_timecode_format() == _session->config.get_timecode_format());
_left_btn.set_text (string_compose ("%1<span face=\"monospace\" foreground=\"%3\">%2</span>",
- sync_source_to_string(sync_src, true)[0],
- dynamic_cast<TimecodeSlave*>(slave)->approximate_current_position (),
- matching ? "#66ff66" : "#ff3333"
+ tm->display_name()[0],
+ tcmaster->position_string (),
+ matching ? "#66ff66" : "#ff3333"
), true);
- _right_btn.set_text (slave->approximate_current_delta (), true);
+ _right_btn.set_text (tm->delta_string (), true);
}
} else {
_left_btn.set_text (_("--pending--"), true);
break;
}
} else {
- _left_btn.set_text (string_compose ("%1/%2",
- _("INT"), sync_source_to_string(sync_src, true)), true);
+ _left_btn.set_text (string_compose ("%1/%2", _("INT"), tm->display_name()), true);
_right_btn.set_text ("", true);
}
}
}
}
- set (last_when, true);
+ AudioClock::set (last_when, true);
}
}
if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
samples *= 10;
}
- set (current_time() + samples, true);
+ AudioClock::set (current_time() + samples, true);
ValueChanged (); /* EMIT_SIGNAL */
}
break;
}
if (!_negative_allowed && (double)current_time() - (double)samples < 0.0) {
- set (0, true);
+ AudioClock::set (0, true);
} else {
- set (current_time() - samples, true);
+ AudioClock::set (current_time() - samples, true);
}
ValueChanged (); /* EMIT_SIGNAL */
samples = get_sample_step (drag_field, pos, dir);
if (samples != 0 && samples * drag_accum < current_time()) {
- set ((samplepos_t) floor (pos - drag_accum * samples), false); // minus because up is negative in GTK
+ AudioClock::set ((samplepos_t) floor (pos - drag_accum * samples), false); // minus because up is negative in GTK
} else {
- set (0 , false);
+ AudioClock::set (0 , false);
}
drag_accum= 0;
case MinSec:
case Seconds:
case Samples:
- ret = last_when;
ret = last_when;
break;
}
}
bool
-AudioClock::bbt_validate_edit (const string& str)
+AudioClock::bbt_validate_edit (string & str)
{
AnyTime any;
}
if (!is_duration && any.bbt.beats == 0) {
- return false;
+ /* user could not have mean zero beats because for a
+ * non-duration clock that's impossible. Assume that they
+ * mis-entered things and meant Bar|1|ticks
+ */
+
+ char buf[128];
+ snprintf (buf, sizeof (buf), "%" PRIu32 "|%" PRIu32 "|%" PRIu32, any.bbt.bars, 1, any.bbt.ticks);
+ str = buf;
}
return true;
return;
}
- set (_session->transport_sample());
+ AudioClock::set (_session->transport_sample());
ValueChanged ();
}
break;
}
- set (last_when, true);
+ AudioClock::set (last_when, true);
if (!is_transient && !noemit) {
ModeChanged (); /* EMIT SIGNAL (the static one)*/
}
is_duration = yn;
- set (last_when, true);
+ AudioClock::set (last_when, true);
}
void
* change
*/
- set (last_when, true);
+ AudioClock::set (last_when, true);
}
void