#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"
break;
case Seconds:
- // no break
+ /* fall through */
case Samples:
if (edit_string.length() < 1) {
edit_string = pre_edit_string;
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);
}
}
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;