#include "pbd/convert.h"
#include "pbd/enumwriter.h"
+#include <gtkmm/style.h>
#include <gtkmm2ext/utils.h>
#include "ardour/ardour.h"
10 /* Audio Frame */
};
-AudioClock::AudioClock (std::string clock_name, bool transient, std::string widget_name,
+AudioClock::AudioClock (const string& clock_name, bool transient, const string& widget_name,
bool allow_edit, bool follows_playhead, bool duration, bool with_info)
: _name (clock_name),
is_transient (transient),
clock_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK);
clock_base.signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &AudioClock::field_button_release_event), Timecode_Hours));
- Session::TimecodeOffsetChanged.connect (_session_connections, boost::bind (&AudioClock::timecode_offset_changed, this), gui_context());
-
if (editable) {
setup_events ();
}
}
void
-AudioClock::set (nframes_t when, bool force, nframes_t offset, char which)
+AudioClock::set (framepos_t when, bool force, framecnt_t offset, char which)
{
if ((!force && !is_visible()) || _session == 0) {
}
void
-AudioClock::timecode_offset_changed ()
+AudioClock::session_configuration_changed (std::string p)
{
- nframes_t current;
+ if (p != "timecode-offset" && p != "timecode-offset-negative") {
+ return;
+ }
+
+ framecnt_t current;
switch (_mode) {
case Timecode:
if (is_duration) {
- current = current_duration();
+ current = current_duration ();
} else {
current = current_time ();
}
}
void
-AudioClock::set_frames (nframes_t when, bool /*force*/)
+AudioClock::set_frames (framepos_t when, bool /*force*/)
{
char buf[32];
- snprintf (buf, sizeof (buf), "%u", when);
+ snprintf (buf, sizeof (buf), "%" PRId64, when);
audio_frames_label.set_text (buf);
if (frames_upper_info_label) {
- nframes_t rate = _session->frame_rate();
+ framecnt_t rate = _session->frame_rate();
if (fmod (rate, 1000.0) == 0.000) {
- sprintf (buf, "%uK", rate/1000);
+ sprintf (buf, "%" PRId64 "K", rate/1000);
} else {
sprintf (buf, "%.3fK", rate/1000.0f);
}
}
void
-AudioClock::set_minsec (nframes_t when, bool force)
+AudioClock::set_minsec (framepos_t when, bool force)
{
char buf[32];
- nframes_t left;
+ framecnt_t left;
int hrs;
int mins;
float secs;
left = when;
hrs = (int) floor (left / (_session->frame_rate() * 60.0f * 60.0f));
- left -= (nframes_t) floor (hrs * _session->frame_rate() * 60.0f * 60.0f);
+ left -= (framecnt_t) floor (hrs * _session->frame_rate() * 60.0f * 60.0f);
mins = (int) floor (left / (_session->frame_rate() * 60.0f));
- left -= (nframes_t) floor (mins * _session->frame_rate() * 60.0f);
+ left -= (framecnt_t) floor (mins * _session->frame_rate() * 60.0f);
secs = left / (float) _session->frame_rate();
if (force || hrs != ms_last_hrs) {
}
void
-AudioClock::set_timecode (nframes_t when, bool force)
+AudioClock::set_timecode (framepos_t when, bool force)
{
char buf[32];
Timecode::Time timecode;
}
void
-AudioClock::set_bbt (nframes_t when, bool force)
+AudioClock::set_bbt (framepos_t when, bool force)
{
char buf[16];
- BBT_Time bbt;
+ Timecode::BBT_Time bbt;
/* handle a common case */
if (is_duration) {
}
if (bbt_upper_info_label) {
- nframes64_t pos;
+ framepos_t pos;
if (bbt_reference_time < 0) {
pos = when;
if (_session) {
+ _session->config.ParameterChanged.connect (_session_connections, invalidator (*this), boost::bind (&AudioClock::session_configuration_changed, this, _1), gui_context());
+
XMLProperty* prop;
XMLNode* node = _session->extra_xml (X_("ClockModes"));
AudioClock::Mode amode;
return false;
}
- nframes_t frames = 0;
+ framepos_t frames = 0;
switch (ev->button) {
case 1:
ValueChanged (); /* EMIT_SIGNAL */
}
- /* make absolutely sure that the pointer is grabbed */
+ /* make absolutely sure that the pointer is grabbed */
gdk_pointer_grab(ev->window,false ,
GdkEventMask( Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK |Gdk::BUTTON_RELEASE_MASK),
NULL,NULL,ev->time);
return false;
}
- nframes_t frames = 0;
+ framepos_t frames = 0;
switch (ev->direction) {
if (trunc(drag_accum) != 0) {
- nframes_t frames;
- nframes_t pos ;
+ framepos_t frames;
+ framepos_t pos;
int dir;
dir = (drag_accum < 0 ? 1:-1);
pos = current_time();
if (frames != 0 && frames * drag_accum < current_time()) {
- set ((nframes_t) floor (pos - drag_accum * frames), false); // minus because up is negative in computer-land
+ set ((framepos_t) floor (pos - drag_accum * frames), false); // minus because up is negative in computer-land
} else {
set (0 , false);
return true;
}
-nframes_t
-AudioClock::get_frames (Field field,nframes_t pos,int dir)
+framepos_t
+AudioClock::get_frames (Field field, framepos_t pos, int dir)
{
-
- nframes_t frames = 0;
- BBT_Time bbt;
+ framecnt_t frames = 0;
+ Timecode::BBT_Time bbt;
switch (field) {
case Timecode_Hours:
- frames = (nframes_t) floor (3600.0 * _session->frame_rate());
+ frames = (framecnt_t) floor (3600.0 * _session->frame_rate());
break;
case Timecode_Minutes:
- frames = (nframes_t) floor (60.0 * _session->frame_rate());
+ frames = (framecnt_t) floor (60.0 * _session->frame_rate());
break;
case Timecode_Seconds:
frames = _session->frame_rate();
break;
case Timecode_Frames:
- frames = (nframes_t) floor (_session->frame_rate() / _session->timecode_frames_per_second());
+ frames = (framecnt_t) floor (_session->frame_rate() / _session->timecode_frames_per_second());
break;
case AudioFrames:
break;
case MS_Hours:
- frames = (nframes_t) floor (3600.0 * _session->frame_rate());
+ frames = (framecnt_t) floor (3600.0 * _session->frame_rate());
break;
case MS_Minutes:
- frames = (nframes_t) floor (60.0 * _session->frame_rate());
+ frames = (framecnt_t) floor (60.0 * _session->frame_rate());
break;
case MS_Seconds:
frames = _session->frame_rate();
return frames;
}
-nframes_t
-AudioClock::current_time (nframes_t pos) const
+framepos_t
+AudioClock::current_time (framepos_t pos) const
{
- nframes_t ret = 0;
+ framepos_t ret = 0;
switch (_mode) {
case Timecode:
return ret;
}
-nframes_t
-AudioClock::current_duration (nframes_t pos) const
+framepos_t
+AudioClock::current_duration (framepos_t pos) const
{
- nframes_t ret = 0;
+ framepos_t ret = 0;
switch (_mode) {
case Timecode:
}
}
-nframes_t
+framepos_t
AudioClock::timecode_frame_from_display () const
{
if (_session == 0) {
}
Timecode::Time timecode;
- nframes_t sample;
+ framepos_t sample;
timecode.hours = atoi (hours_label.get_text());
timecode.minutes = atoi (minutes_label.get_text());
// Testcode for timecode<->sample conversions (P.S.)
Timecode::Time timecode1;
- nframes_t sample1;
- nframes_t oldsample = 0;
+ framepos_t sample1;
+ framepos_t oldsample = 0;
Timecode::Time timecode2;
- nframes_t sample_increment;
+ framecnt_t sample_increment;
- sample_increment = (long)rint(_session->frame_rate() / _session->timecode_frames_per_second);
+ sample_increment = (framecnt_t)rint(_session->frame_rate() / _session->timecode_frames_per_second);
#ifdef Timecode_SAMPLE_TEST_1
// Test 1: use_offset = false, use_subframes = false
return sample;
}
-nframes_t
+framepos_t
AudioClock::minsec_frame_from_display () const
{
if (_session == 0) {
int mins = atoi (ms_minutes_label.get_text());
float secs = atof (ms_seconds_label.get_text());
- nframes_t sr = _session->frame_rate();
+ framecnt_t sr = _session->frame_rate();
- return (nframes_t) floor ((hrs * 60.0f * 60.0f * sr) + (mins * 60.0f * sr) + (secs * sr));
+ return (framepos_t) floor ((hrs * 60.0f * 60.0f * sr) + (mins * 60.0f * sr) + (secs * sr));
}
-nframes_t
-AudioClock::bbt_frame_from_display (nframes_t pos) const
+framepos_t
+AudioClock::bbt_frame_from_display (framepos_t pos) const
{
if (_session == 0) {
error << "AudioClock::current_time() called with BBT mode but without session!" << endmsg;
any.bbt.beats = atoi (beats_label.get_text());
any.bbt.ticks = atoi (ticks_label.get_text());
- if (is_duration) {
- any.bbt.bars++;
- any.bbt.beats++;
- }
-
- nframes_t ret = _session->convert_to_frames_at (pos, any);
+ if (is_duration) {
+ any.bbt.bars++;
+ any.bbt.beats++;
+ }
- return ret;
+ return _session->convert_to_frames_at (pos, any);
}
-nframes_t
-AudioClock::bbt_frame_duration_from_display (nframes_t pos) const
+framepos_t
+AudioClock::bbt_frame_duration_from_display (framepos_t pos) const
{
if (_session == 0) {
error << "AudioClock::current_time() called with BBT mode but without session!" << endmsg;
return 0;
}
- BBT_Time bbt;
+ Timecode::BBT_Time bbt;
bbt.bars = atoi (bars_label.get_text());
return _session->tempo_map().bbt_duration_at(pos,bbt,1);
}
-nframes_t
+framepos_t
AudioClock::audio_frame_from_display () const
{
- return (nframes_t) atoi (audio_frames_label.get_text());
+ return (framepos_t) atoi (audio_frames_label.get_text());
}
void
if (editable && !is_duration && !_follows_playhead) {
ops_items.push_back (SeparatorElem());
ops_items.push_back (MenuElem (_("Set From Playhead"), sigc::mem_fun(*this, &AudioClock::set_from_playhead)));
- ops_items.push_back (MenuElem (_("Locate to this time"), sigc::mem_fun(*this, &AudioClock::locate)));
+ ops_items.push_back (MenuElem (_("Locate to This Time"), sigc::mem_fun(*this, &AudioClock::locate)));
}
}
return;
}
- _session->request_locate (current_time(), false);
+ _session->request_locate (current_time(), _session->transport_rolling ());
}
void
}
void
-AudioClock::set_bbt_reference (nframes64_t pos)
+AudioClock::set_bbt_reference (framepos_t pos)
{
bbt_reference_time = pos;
}
void
-AudioClock::on_style_changed (const Glib::RefPtr<Style>& old_style)
+AudioClock::on_style_changed (const Glib::RefPtr<Gtk::Style>& old_style)
{
HBox::on_style_changed (old_style);
set_size_requests ();
}
+
+void
+AudioClock::set_is_duration (bool yn)
+{
+ if (yn == is_duration) {
+ return;
+ }
+
+ is_duration = yn;
+ set (last_when, true, 0, 's');
+}