continued work on timeline types conversion. in theory, just editor_ops.cc remains

This commit is contained in:
Paul Davis 2020-10-19 12:37:54 -06:00
parent aa56f4a16e
commit 2a08e4bdaa
46 changed files with 364 additions and 348 deletions

View File

@ -261,20 +261,22 @@ AnalysisWindow::analyze_data (Gtk::Button * /*button*/)
FFTResult *res = fft_graph.prepareResult(rui->route_color(), rui->route()->name());
for (std::list<TimelineRange>::iterator j = ts.begin(); j != ts.end(); ++j) {
int n;
samplecnt_t n;
const samplecnt_t slen = j->length().samples();
for (int channel = 0; channel < n_inputs; channel++) {
samplecnt_t x = 0;
while (x < j->length()) {
while (x < slen) {
// TODO: What about stereo+ channels? composite all to one, I guess
n = fft_graph.windowSize();
if (x + n >= (*j).length() ) {
n = (*j).length() - x;
if (x + n >= slen) {
n = slen - x;
}
n = pl->read(buf, mixbuf, gain, (*j).start + x, n, channel);
n = pl->read(buf, mixbuf, gain, j->start() + timepos_t (x), timecnt_t (n), channel).samples();
if ( n < fft_graph.windowSize()) {
for (int j = n; j < fft_graph.windowSize(); j++) {
@ -314,10 +316,10 @@ AnalysisWindow::analyze_data (Gtk::Button * /*button*/)
}
FFTResult *res = fft_graph.prepareResult(rtav->color(), arv->get_item_name());
int n;
for (unsigned int channel = 0; channel < arv->region()->n_channels(); channel++) {
for (unsigned int channel = 0; channel < arv->audio_region()->n_channels(); channel++) {
samplecnt_t x = 0;
samplecnt_t length = arv->region()->length();
samplecnt_t length = arv->region()->length_samples();
while (x < length) {
// TODO: What about stereo+ channels? composite all to one, I guess
@ -328,7 +330,7 @@ AnalysisWindow::analyze_data (Gtk::Button * /*button*/)
}
memset (buf, 0, n * sizeof (Sample));
n = arv->audio_region()->read_at(buf, mixbuf, gain, arv->region()->position() + x, n, channel);
n = arv->audio_region()->read_at(buf, mixbuf, gain, arv->region()->position_sample() + x, n, channel);
if (n == 0)
break;
@ -408,5 +410,3 @@ AnalysisWindow::display_model_changed (Gtk::RadioButton *button)
}
*/
}

View File

@ -225,7 +225,7 @@ using namespace Editing;
ARDOUR_UI *ARDOUR_UI::theArdourUI = 0;
sigc::signal<void, samplepos_t> ARDOUR_UI::Clock;
sigc::signal<void, timepos_t> ARDOUR_UI::Clock;
sigc::signal<void> ARDOUR_UI::CloseAllDialogs;
static bool
@ -2231,7 +2231,7 @@ void
ARDOUR_UI::primary_clock_value_changed ()
{
if (_session) {
_session->request_locate (primary_clock->current_time ());
_session->request_locate (primary_clock->current_time ().samples());
}
}
@ -2239,7 +2239,7 @@ void
ARDOUR_UI::big_clock_value_changed ()
{
if (_session) {
_session->request_locate (big_clock->current_time ());
_session->request_locate (big_clock->current_time ().samples());
}
}
@ -2247,7 +2247,7 @@ void
ARDOUR_UI::secondary_clock_value_changed ()
{
if (_session) {
_session->request_locate (secondary_clock->current_time ());
_session->request_locate (secondary_clock->current_time ().samples());
}
}
void
@ -2679,7 +2679,7 @@ ARDOUR_UI::cleanup_peakfiles ()
RegionSelection rs;
TrackViewList empty;
empty.clear();
editor->get_regions_after(rs, (samplepos_t) 0, empty);
editor->get_regions_after(rs, timepos_t (), empty);
std::list<RegionView*> views = rs.by_layer();
// remove displayed audio-region-views waveforms

View File

@ -526,11 +526,11 @@ ARDOUR_UI::reset_main_clocks ()
ENSURE_GUI_THREAD (*this, &ARDOUR_UI::reset_main_clocks)
if (_session) {
primary_clock->set (_session->audible_sample(), true);
secondary_clock->set (_session->audible_sample(), true);
primary_clock->set (timepos_t (_session->audible_sample()), true);
secondary_clock->set (timepos_t (_session->audible_sample()), true);
} else {
primary_clock->set (0, true);
secondary_clock->set (0, true);
primary_clock->set (timepos_t(), true);
secondary_clock->set (timepos_t(), true);
}
}

View File

@ -2310,7 +2310,7 @@ AudioClock::set_mode (Mode m, bool noemit)
}
void
AudioClock::set_bbt_reference (samplepos_t pos)
AudioClock::set_bbt_reference (timepos_t const & pos)
{
bbt_reference_time = pos;
}

View File

@ -79,7 +79,7 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr
void set_from_playhead ();
void locate ();
void set_mode (Mode, bool noemit = false);
void set_bbt_reference (samplepos_t);
void set_bbt_reference (Temporal::timepos_t const &);
void set_is_duration (bool);
void set_is_duration (bool, Temporal::timepos_t const &);

View File

@ -753,7 +753,7 @@ AutomationTimeAxisView::build_display_menu ()
}
void
AutomationTimeAxisView::add_automation_event (GdkEvent* event, samplepos_t sample, double y, bool with_guard_points)
AutomationTimeAxisView::add_automation_event (GdkEvent* event, timepos_t const & pos, double y, bool with_guard_points)
{
if (!_line) {
return;
@ -768,7 +768,7 @@ AutomationTimeAxisView::add_automation_event (GdkEvent* event, samplepos_t sampl
return;
}
timepos_t when (sample);
timepos_t when (pos);
_editor.snap_to_with_modifier (when, event);
if (UIConfiguration::instance().get_new_automation_points_on_lane()) {

View File

@ -87,7 +87,7 @@ public:
boost::shared_ptr<ARDOUR::Stripable> stripable() const;
ARDOUR::PresentationInfo const & presentation_info () const;
void add_automation_event (GdkEvent *, samplepos_t, double, bool with_guard_points);
void add_automation_event (GdkEvent *, Temporal::timepos_t const &, double, bool with_guard_points);
void clear_lines ();

View File

@ -291,7 +291,7 @@ public:
void invert_selection_in_track ();
void invert_selection ();
void deselect_all ();
long select_range (samplepos_t, samplepos_t);
long select_range (Temporal::timepos_t const & , Temporal::timepos_t const &);
void set_selected_regionview_from_region_list (boost::shared_ptr<ARDOUR::Region> region, Selection::Operation op = Selection::Set);
@ -1299,8 +1299,8 @@ private:
void remove_region_sync();
void align_regions (ARDOUR::RegionPoint);
void align_regions_relative (ARDOUR::RegionPoint point);
void align_region (boost::shared_ptr<ARDOUR::Region>, ARDOUR::RegionPoint point, samplepos_t position);
void align_region_internal (boost::shared_ptr<ARDOUR::Region>, ARDOUR::RegionPoint point, samplepos_t position);
void align_region (boost::shared_ptr<ARDOUR::Region>, ARDOUR::RegionPoint point, Temporal::timepos_t const & position);
void align_region_internal (boost::shared_ptr<ARDOUR::Region>, ARDOUR::RegionPoint point, Temporal::timepos_t const & position);
void recover_regions (ARDOUR::RegionList);
void remove_selected_regions ();
void remove_clicked_region ();
@ -1404,7 +1404,7 @@ private:
Editing::ImportDisposition disposition,
Editing::ImportMode mode,
ARDOUR::SrcQuality quality,
samplepos_t& pos,
Temporal::timepos_t& pos,
int target_regions,
int target_tracks,
boost::shared_ptr<ARDOUR::Track>& track,
@ -1417,7 +1417,7 @@ private:
bool& check_sample_rate,
Editing::ImportDisposition disposition,
Editing::ImportMode mode,
samplepos_t& pos,
Temporal::timepos_t& pos,
int target_regions,
int target_tracks,
boost::shared_ptr<ARDOUR::Track>& track,
@ -1426,7 +1426,7 @@ private:
int add_sources (std::vector<std::string> paths,
ARDOUR::SourceList& sources,
samplepos_t& pos,
Temporal::timepos_t& pos,
Editing::ImportDisposition disposition,
Editing::ImportMode mode,
int target_regions,
@ -1439,7 +1439,7 @@ private:
int finish_bringing_in_material (boost::shared_ptr<ARDOUR::Region> region,
uint32_t in_chans,
uint32_t out_chans,
samplepos_t& pos,
Temporal::timepos_t& pos,
Editing::ImportMode mode,
boost::shared_ptr<ARDOUR::Track>& existing_track,
std::string const& new_track_name,
@ -1475,7 +1475,7 @@ private:
}
Editing::ImportMode mode;
samplepos_t pos;
Temporal::timepos_t pos;
int target_tracks;
int target_regions;
boost::shared_ptr<ARDOUR::Track> track;
@ -1491,8 +1491,8 @@ private:
void import_audio (bool as_tracks);
void do_import (std::vector<std::string> paths, bool split, bool as_tracks);
void import_smf_tempo_map (Evoral::SMF const &, samplepos_t pos);
void import_smf_markers (Evoral::SMF &, samplepos_t pos);
void import_smf_tempo_map (Evoral::SMF const &, Temporal::timepos_t const & pos);
void import_smf_markers (Evoral::SMF &, Temporal::timepos_t const & pos);
void move_to_start ();
void move_to_end ();
void center_playhead ();
@ -2236,7 +2236,7 @@ private:
void selected_marker_moved (ARDOUR::Location*);
bool get_edit_op_range (Temporal::timepos_t& start, samplepos_t& end) const;
bool get_edit_op_range (Temporal::timepos_t& start, Temporal::timepos_t& end) const;
void get_regions_at (RegionSelection&, Temporal::timepos_t const & where, const TrackViewList& ts) const;
void get_regions_after (RegionSelection&, Temporal::timepos_t const & where, const TrackViewList& ts) const;

View File

@ -1042,15 +1042,17 @@ Editor::set_xjadeo_viewoption (int what)
void
Editor::edit_current_meter ()
{
ARDOUR::MeterSection* ms = const_cast<ARDOUR::MeterSection*>(&_session->tempo_map().meter_section_at_sample (ARDOUR_UI::instance()->primary_clock->absolute_time()));
edit_meter_section (ms);
#warning NUTEMPO needs new map API
//ARDOUR::MeterSection* ms = const_cast<ARDOUR::MeterSection*>(&_session->tempo_map().meter_section_at_sample (ARDOUR_UI::instance()->primary_clock->absolute_time()));
//edit_meter_section (ms);
}
void
Editor::edit_current_tempo ()
{
ARDOUR::TempoSection* ts = const_cast<ARDOUR::TempoSection*>(&_session->tempo_map().tempo_section_at_sample (ARDOUR_UI::instance()->primary_clock->absolute_time()));
edit_tempo_section (ts);
#warning NUTEMPO needs new map API
// ARDOUR::TempoSection* ts = const_cast<ARDOUR::TempoSection*>(&_session->tempo_map().tempo_section_at_sample (ARDOUR_UI::instance()->primary_clock->absolute_time()));
// edit_tempo_section (ts);
}
RefPtr<RadioAction>

View File

@ -267,7 +267,7 @@ Editor::get_nth_selected_midi_track (int nth) const
}
void
Editor::import_smf_tempo_map (Evoral::SMF const & smf, samplepos_t pos)
Editor::import_smf_tempo_map (Evoral::SMF const & smf, timepos_t const & pos)
{
if (!_session) {
return;
@ -301,8 +301,9 @@ Editor::import_smf_tempo_map (Evoral::SMF const & smf, samplepos_t pos)
}
} else {
new_map.replace_meter (new_map.meter_section_at_sample (0), meter, bbt, pos, AudioTime);
new_map.replace_tempo (new_map.tempo_section_at_sample (0), tempo, 0.0, pos, AudioTime);
#warning NUTEMPO needs new tempo map API
//new_map.replace_meter (new_map.meter_section_at_sample (0), meter, bbt, pos, AudioTime);
//new_map.replace_tempo (new_map.tempo_section_at_sample (0), tempo, 0.0, pos, AudioTime);
have_initial_meter = true;
}
@ -314,7 +315,7 @@ Editor::import_smf_tempo_map (Evoral::SMF const & smf, samplepos_t pos)
}
void
Editor::import_smf_markers (Evoral::SMF & smf, samplepos_t pos)
Editor::import_smf_markers (Evoral::SMF & smf, timepos_t const & pos)
{
if (!_session) {
return;
@ -332,9 +333,8 @@ Editor::import_smf_markers (Evoral::SMF & smf, samplepos_t pos)
for (Evoral::SMF::Markers::const_iterator m = markers.begin(); m != markers.end(); ++m) {
// Temporal::Beats beat_pos (m->time_pulses / (double) smf.ppqn() / 4.0);
double beat = m->time_pulses / (double) smf.ppqn();
samplepos_t samplepos = pos + _session->tempo_map().sample_at_beat (beat);
Location* loc = new Location (*_session, samplepos, samplepos_t (0), m->text, Location::IsMark, 0);
Beats beats = Beats::from_double (m->time_pulses / (double) smf.ppqn());
Location* loc = new Location (*_session, timepos_t (beats), timepos_t (MusicTime), m->text, Location::IsMark, 0);
_session->locations()->add (loc);
}
@ -585,7 +585,7 @@ Editor::import_sndfiles (vector<string> paths,
ImportDisposition disposition,
ImportMode mode,
SrcQuality quality,
samplepos_t& pos,
timepos_t& pos,
int target_regions,
int target_tracks,
boost::shared_ptr<Track>& track,
@ -658,7 +658,7 @@ Editor::embed_sndfiles (vector<string> paths,
bool& check_sample_rate,
ImportDisposition disposition,
ImportMode mode,
samplepos_t& pos,
timepos_t& pos,
int target_regions,
int target_tracks,
boost::shared_ptr<Track>& track,
@ -788,7 +788,7 @@ Editor::embed_sndfiles (vector<string> paths,
int
Editor::add_sources (vector<string> paths,
SourceList& sources,
samplepos_t& pos,
timepos_t& pos,
ImportDisposition disposition,
ImportMode mode,
int target_regions,
@ -827,7 +827,7 @@ Editor::add_sources (vector<string> paths,
PropertyList plist;
plist.add (ARDOUR::Properties::start, 0);
plist.add (ARDOUR::Properties::length, sources[0]->length (pos));
plist.add (ARDOUR::Properties::length, sources[0]->length ());
plist.add (ARDOUR::Properties::name, region_name);
plist.add (ARDOUR::Properties::layer, 0);
plist.add (ARDOUR::Properties::whole_file, true);
@ -910,9 +910,9 @@ Editor::add_sources (vector<string> paths,
is a MIDI region the conversion from samples -> beats -> samples will
round it back down to 0 again.
*/
samplecnt_t len = (*x)->length (pos);
timecnt_t len = (*x)->length ();
if (len == 0) {
len = (60.0 / 120.0) * _session->sample_rate ();
len = timecnt_t (_session->sample_rate ()) / 2;
}
plist.add (ARDOUR::Properties::start, 0);
@ -933,7 +933,7 @@ Editor::add_sources (vector<string> paths,
}
if (target_regions == 1) {
input_chan = regions.front()->n_channels();
input_chan = regions.front()->sources().size();
} else {
if (target_tracks == 1) {
input_chan = regions.size();
@ -949,7 +949,7 @@ Editor::add_sources (vector<string> paths,
}
int n = 0;
samplepos_t rlen = 0;
timecnt_t rlen;
begin_reversible_command (Operations::insert_file);
@ -993,14 +993,14 @@ Editor::add_sources (vector<string> paths,
finish_bringing_in_material (*r, input_chan, output_chan, pos, mode, track, track_names[n], pgroup_id, instrument);
rlen = (*r)->length();
rlen = (*r)->nt_length();
if (target_tracks != 1) {
track.reset ();
} else {
if (!use_timestamp || !ar) {
/* line each one up right after the other */
pos += (*r)->length();
pos += (*r)->nt_length();
}
}
}
@ -1020,7 +1020,7 @@ int
Editor::finish_bringing_in_material (boost::shared_ptr<Region> region,
uint32_t in_chans,
uint32_t out_chans,
samplepos_t& pos,
timepos_t& pos,
ImportMode mode,
boost::shared_ptr<Track>& existing_track,
string const& new_track_name,

View File

@ -1319,7 +1319,7 @@ Editor::drop_regions (const Glib::RefPtr<Gdk::DragContext>& /*context*/,
if ((boost::dynamic_pointer_cast<AudioRegion> (region_copy) != 0 && dynamic_cast<AudioTimeAxisView*> (rtav) != 0) ||
(boost::dynamic_pointer_cast<MidiRegion> (region_copy) != 0 && dynamic_cast<MidiTimeAxisView*> (rtav) != 0)) {
_drags->set (new RegionInsertDrag (this, region_copy, rtav, pos), &event);
_drags->set (new RegionInsertDrag (this, region_copy, rtav, timepos_t (pos)), &event);
_drags->end_grab (&event);
}
}

View File

@ -5185,7 +5185,7 @@ LineDrag::finished (GdkEvent* event, bool movement_occurred)
AutomationTimeAxisView* atv;
if ((atv = dynamic_cast<AutomationTimeAxisView*>(_editor->clicked_axisview)) != 0) {
samplepos_t where = grab_sample ();
timepos_t where = grab_time ();
double cx = 0;
double cy = _fixed_grab_y;

View File

@ -606,7 +606,7 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
std::list<Selectable*> selectables;
uint32_t before, after;
samplecnt_t const where = (samplecnt_t) floor (event->button.x * samples_per_pixel) - clicked_regionview->region ()->position ();
samplecnt_t const where = (samplecnt_t) floor (event->button.x * samples_per_pixel) - clicked_regionview->region ()->position_sample ();
if (!argl || !argl->control_points_adjacent (where, before, after)) {
break;
@ -1135,12 +1135,12 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
_drags->set (new RegionCreateDrag (this, item, parent), event);
} else {
/* See if there's a region before the click that we can extend, and extend it if so */
samplepos_t const t = canvas_event_sample (event);
timepos_t const t (canvas_event_sample (event));
boost::shared_ptr<Region> prev = pl->find_next_region (t, End, -1);
if (!prev) {
_drags->set (new RegionCreateDrag (this, item, parent), event);
} else {
prev->set_length (t - prev->position (), get_grid_music_divisions (event->button.state));
prev->set_length (prev->nt_position ().distance (t));
}
}
} else {
@ -1237,7 +1237,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
continue;
}
for (list<TimelineRange>::const_iterator j = selection->time.begin(); j != selection->time.end(); ++j) {
boost::shared_ptr<RegionList> rl = playlist->regions_touched (j->start, j->end);
boost::shared_ptr<RegionList> rl = playlist->regions_touched (j->start(), j->end());
for (RegionList::iterator ir = rl->begin(); ir != rl->end(); ++ir) {
RegionView* rv;
if ((rv = tatv->view()->find_view (*ir)) != 0) {
@ -1431,9 +1431,9 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
UIConfiguration::instance().get_follow_edits() &&
!_session->config.get_external_sync()) {
MusicSample where (canvas_event_sample (event), 0);
timepos_t where (canvas_event_sample (event));
snap_to (where);
_session->request_locate (where.sample, MustStop);
_session->request_locate (where.samples(), MustStop);
}
switch (event->button.button) {
@ -1478,7 +1478,7 @@ Editor::button_release_dispatch (GdkEventButton* ev)
bool
Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
{
MusicSample where (canvas_event_sample (event), 0);
timepos_t where (canvas_event_sample (event));
AutomationTimeAxisView* atv = 0;
_press_cursor_ctx.reset();
@ -1717,29 +1717,29 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
case MarkerBarItem:
if (!_dragging_playhead) {
snap_to_with_modifier (where, event, RoundNearest, SnapToGrid_Scaled);
mouse_add_new_marker (where.sample);
snap_to_with_modifier (where, event, Temporal::RoundNearest, SnapToGrid_Scaled);
mouse_add_new_marker (where);
}
return true;
case CdMarkerBarItem:
if (!_dragging_playhead) {
/* if we get here then a dragged range wasn't done */
snap_to_with_modifier (where, event, RoundNearest, SnapToGrid_Scaled);
mouse_add_new_marker (where.sample, true);
snap_to_with_modifier (where, event, Temporal::RoundNearest, SnapToGrid_Scaled);
mouse_add_new_marker (where, true);
}
return true;
case TempoBarItem:
case TempoCurveItem:
if (!_dragging_playhead && Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
snap_to_with_modifier (where, event);
mouse_add_new_tempo_event (where.sample);
mouse_add_new_tempo_event (where);
}
return true;
case MeterBarItem:
if (!_dragging_playhead && Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
mouse_add_new_meter_event (pixel_to_sample (event->button.x));
mouse_add_new_meter_event (timepos_t (pixel_to_sample (event->button.x)));
}
return true;
break;
@ -1777,7 +1777,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
bool with_guard_points = Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier);
atv = dynamic_cast<AutomationTimeAxisView*>(clicked_axisview);
if (atv) {
atv->add_automation_event (event, where.sample, event->button.y, with_guard_points);
atv->add_automation_event (event, where, event->button.y, with_guard_points);
}
return true;
break;
@ -2226,21 +2226,22 @@ Editor::motion_handler (ArdourCanvas::Item* /*item*/, GdkEvent* event, bool from
} else {
bool ignored;
bool peaks_visible = false;
MusicSample where (0, 0);
if (mouse_sample (where.sample, ignored)) {
sanplepos_t where;
if (mouse_sample (where, ignored)) {
/* display peaks */
if (mouse_mode == MouseContent || ArdourKeyboard::indicates_snap (event->motion.state)) {
AudioRegionView* arv = dynamic_cast<AudioRegionView*>(entered_regionview);
if (arv) {
_region_peak_cursor->set (arv, where.sample, samples_per_pixel);
_region_peak_cursor->set (arv, where, samples_per_pixel);
peaks_visible = true;
}
}
/* the snapped_cursor shows where an operation (like Split) is going to occur */
snap_to_with_modifier (where, event);
set_snapped_cursor_position (where.sample);
timepos_t t (where);
snap_to_with_modifier (t, event);
set_snapped_cursor_position (t.sample);
}
if (!peaks_visible) {
@ -2372,22 +2373,23 @@ Editor::region_view_item_click (AudioRegionView& rv, GdkEventButton* event)
if (Keyboard::modifier_state_contains (event->state, Keyboard::PrimaryModifier)) {
samplepos_t where = get_preferred_edit_position();
timepos_t where = get_preferred_edit_position();
if (where >= 0) {
if (where.negative()) {
return;
}
if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
align_region (rv.region(), SyncPoint, where);
align_region (rv.region(), SyncPoint, where);
} else if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
} else if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
align_region (rv.region(), End, where);
align_region (rv.region(), End, where);
} else {
} else {
align_region (rv.region(), Start, where);
}
align_region (rv.region(), Start, where);
}
}
}
@ -2646,7 +2648,7 @@ Editor::start_selection_grab (ArdourCanvas::Item* /*item*/, GdkEvent* event)
boost::shared_ptr<Playlist> playlist = clicked_axisview->playlist();
playlist->clear_changes ();
clicked_routeview->playlist()->add_region (region, selection->time[clicked_selection].start);
clicked_routeview->playlist()->add_region (region, selection->time[clicked_selection].start());
_session->add_command(new StatefulDiffCommand (playlist));
c.disconnect ();

View File

@ -3776,7 +3776,7 @@ Editor::align_regions_relative (RegionPoint point)
}
void
Editor::align_region (boost::shared_ptr<Region> region, RegionPoint point, samplepos_t position)
Editor::align_region (boost::shared_ptr<Region> region, RegionPoint point, timepos_t const & position)
{
begin_reversible_command (_("align region"));
align_region_internal (region, point, position);
@ -3784,7 +3784,7 @@ Editor::align_region (boost::shared_ptr<Region> region, RegionPoint point, sampl
}
void
Editor::align_region_internal (boost::shared_ptr<Region> region, RegionPoint point, samplepos_t position)
Editor::align_region_internal (boost::shared_ptr<Region> region, RegionPoint point, timepos_t const & position)
{
region->clear_changes ();

View File

@ -754,24 +754,24 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op)
} else if (op == Selection::Extend) {
list<Selectable*> results;
samplepos_t last_sample;
samplepos_t first_sample;
timepos_t last_pos;
timepos_t first_pos;
bool same_track = false;
/* 1. find the last selected regionview in the track that was clicked in */
last_sample = 0;
first_sample = max_samplepos;
last_pos = 0;
first_pos = timepos_t::max (selection->regions.empty() ? Temporal::AudioTime : selection->regions.front()->region()->nt_position().time_domain());
for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) {
if (&(*x)->get_time_axis_view() == &clicked_regionview->get_time_axis_view()) {
if ((*x)->region()->last_sample() > last_sample) {
last_sample = (*x)->region()->last_sample();
if ((*x)->region()->nt_last() > last_pos) {
last_pos = (*x)->region()->nt_last();
}
if ((*x)->region()->first_sample() < first_sample) {
first_sample = (*x)->region()->first_sample();
if ((*x)->region()->nt_position() < first_pos) {
first_pos = (*x)->region()->nt_position();
}
same_track = true;
@ -782,39 +782,39 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op)
/* 2. figure out the boundaries for our search for new objects */
switch (clicked_regionview->region()->coverage (first_sample, last_sample)) {
case Evoral::OverlapNone:
if (last_sample < clicked_regionview->region()->first_sample()) {
first_sample = last_sample;
last_sample = clicked_regionview->region()->last_sample();
switch (clicked_regionview->region()->coverage (first_pos, last_pos)) {
case Temporal::OverlapNone:
if (last_pos < clicked_regionview->region()->nt_position()) {
first_pos = last_pos;
last_pos = clicked_regionview->region()->nt_last();
} else {
last_sample = first_sample;
first_sample = clicked_regionview->region()->first_sample();
last_pos = first_pos;
first_pos = clicked_regionview->region()->nt_position();
}
break;
case Evoral::OverlapExternal:
if (last_sample < clicked_regionview->region()->first_sample()) {
first_sample = last_sample;
last_sample = clicked_regionview->region()->last_sample();
case Temporal::OverlapExternal:
if (last_pos < clicked_regionview->region()->nt_position()) {
first_pos = last_pos;
last_pos = clicked_regionview->region()->nt_last();
} else {
last_sample = first_sample;
first_sample = clicked_regionview->region()->first_sample();
last_pos = first_pos;
first_pos = clicked_regionview->region()->nt_position();
}
break;
case Evoral::OverlapInternal:
if (last_sample < clicked_regionview->region()->first_sample()) {
first_sample = last_sample;
last_sample = clicked_regionview->region()->last_sample();
case Temporal::OverlapInternal:
if (last_pos < clicked_regionview->region()->nt_position()) {
first_pos = last_pos;
last_pos = clicked_regionview->region()->nt_last();
} else {
last_sample = first_sample;
first_sample = clicked_regionview->region()->first_sample();
last_pos = first_pos;
first_pos = clicked_regionview->region()->nt_position();
}
break;
case Evoral::OverlapStart:
case Evoral::OverlapEnd:
case Temporal::OverlapStart:
case Temporal::OverlapEnd:
/* nothing to do except add clicked region to selection, since it
overlaps with the existing selection in this track.
*/
@ -829,15 +829,15 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op)
*/
first_sample = clicked_regionview->region()->position();
last_sample = clicked_regionview->region()->last_sample();
first_pos = clicked_regionview->region()->nt_position();
last_pos = clicked_regionview->region()->nt_last();
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
if ((*i)->region()->position() < first_sample) {
first_sample = (*i)->region()->position();
if ((*i)->region()->nt_position() < first_pos) {
first_pos = (*i)->region()->nt_position();
}
if ((*i)->region()->last_sample() + 1 > last_sample) {
last_sample = (*i)->region()->last_sample();
if ((*i)->region()->nt_end() > last_pos) {
last_pos = (*i)->region()->nt_last();
}
}
}
@ -959,7 +959,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op)
*/
for (set<RouteTimeAxisView*>::iterator t = relevant_tracks.begin(); t != relevant_tracks.end(); ++t) {
(*t)->get_selectables (first_sample, last_sample, -1.0, -1.0, results);
(*t)->get_selectables (first_pos, last_pos, -1.0, -1.0, results);
}
/* 4. convert to a vector of regions */
@ -1290,7 +1290,7 @@ Editor::time_selection_changed ()
if (_session && !_drags->active()) {
if (selection->time.length() != 0) {
_session->set_range_selection (selection->time.start(), selection->time.end_sample());
_session->set_range_selection (selection->time.start_time(), selection->time.end_time());
} else {
_session->clear_range_selection ();
}
@ -1360,7 +1360,7 @@ Editor::sensitize_the_right_region_actions (bool because_canvas_crossing)
}
} else {
RegionSelection at_edit_point;
samplepos_t const where = get_preferred_edit_position (Editing::EDIT_IGNORE_NONE, false, !within_track_canvas);
timepos_t const where = get_preferred_edit_position (Editing::EDIT_IGNORE_NONE, false, !within_track_canvas);
get_regions_at (at_edit_point, where, selection->tracks);
if (!at_edit_point.empty()) {
have_edit_point = true;
@ -1456,7 +1456,7 @@ Editor::sensitize_the_right_region_actions (bool because_canvas_crossing)
have_video_unlocked = true;
}
if (r->position_lock_style() == MusicTime) {
if (r->position_time_domain() == Temporal::BeatTime) {
have_position_lock_style_music = true;
} else {
have_position_lock_style_audio = true;
@ -1683,7 +1683,7 @@ Editor::region_selection_changed ()
assert (_session);
if (!selection->regions.empty()) {
_session->set_object_selection (selection->regions.start(), selection->regions.end_sample());
_session->set_object_selection (selection->regions.start_time(), selection->regions.end_time());
} else {
_session->clear_object_selection ();
}
@ -1737,7 +1737,7 @@ Editor::select_all_in_track (Selection::Operation op)
begin_reversible_selection_op (X_("Select All in Track"));
clicked_routeview->get_selectables (0, max_samplepos, 0, DBL_MAX, touched);
clicked_routeview->get_selectables (timepos_t(), timepos_t::max (Temporal::AudioTime), 0, DBL_MAX, touched);
switch (op) {
case Selection::Toggle:
@ -1802,7 +1802,7 @@ Editor::select_all_objects (Selection::Operation op)
if ((*iter)->hidden()) {
continue;
}
(*iter)->get_selectables (0, max_samplepos, 0, DBL_MAX, touched);
(*iter)->get_selectables (timepos_t(), timepos_t::max (Temporal::AudioTime), 0, DBL_MAX, touched);
}
begin_reversible_selection_op (X_("select all"));
@ -1892,7 +1892,7 @@ Editor::invert_selection ()
* within the region are already selected.
*/
void
Editor::select_all_within (samplepos_t start, samplepos_t end, double top, double bot, const TrackViewList& tracklist, Selection::Operation op, bool preserve_if_selected)
Editor::select_all_within (timepos_t const & start, timepos_t const & end, double top, double bot, const TrackViewList& tracklist, Selection::Operation op, bool preserve_if_selected)
{
list<Selectable*> found;
@ -1961,7 +1961,7 @@ Editor::set_selection_from_region ()
/* select range (this will clear the region selection) */
selection->set (selection->regions.start(), selection->regions.end_sample());
selection->set (selection->regions.start_time(), selection->regions.end_time());
/* and select the tracks */
@ -2024,10 +2024,12 @@ Editor::select_all_selectables_using_time_selection ()
return;
}
samplepos_t start = selection->time[clicked_selection].start;
samplepos_t end = selection->time[clicked_selection].end;
timepos_t start = selection->time[clicked_selection].start();
timepos_t end = selection->time[clicked_selection].end();
if (end - start < 1) {
const timecnt_t distance = start.distance (end);
if (distance.negative() || distance.zero()) {
return;
}
@ -2043,7 +2045,7 @@ Editor::select_all_selectables_using_time_selection ()
if ((*iter)->hidden()) {
continue;
}
(*iter)->get_selectables (start, end - 1, 0, DBL_MAX, touched);
(*iter)->get_selectables (start, end, 0, DBL_MAX, touched);
}
begin_reversible_selection_op (X_("select all from range"));
@ -2058,7 +2060,7 @@ Editor::select_all_selectables_using_punch()
Location* location = _session->locations()->auto_punch_location();
list<Selectable *> touched;
if (location == 0 || (location->end() - location->start() <= 1)) {
if (location == 0 || (location->length_samples() <= 1)) {
return;
}
@ -2075,7 +2077,7 @@ Editor::select_all_selectables_using_punch()
if ((*iter)->hidden()) {
continue;
}
(*iter)->get_selectables (location->start(), location->end() - 1, 0, DBL_MAX, touched);
(*iter)->get_selectables (location->start(), location->end(), 0, DBL_MAX, touched);
}
begin_reversible_selection_op (X_("select all from punch"));
selection->set (touched);
@ -2089,7 +2091,7 @@ Editor::select_all_selectables_using_loop()
Location* location = _session->locations()->auto_loop_location();
list<Selectable *> touched;
if (location == 0 || (location->end() - location->start() <= 1)) {
if (location == 0 || (location->length_samples() <= 1)) {
return;
}
@ -2106,7 +2108,7 @@ Editor::select_all_selectables_using_loop()
if ((*iter)->hidden()) {
continue;
}
(*iter)->get_selectables (location->start(), location->end() - 1, 0, DBL_MAX, touched);
(*iter)->get_selectables (location->start(), location->end(), 0, DBL_MAX, touched);
}
begin_reversible_selection_op (X_("select all from loop"));
selection->set (touched);
@ -2117,17 +2119,17 @@ Editor::select_all_selectables_using_loop()
void
Editor::select_all_selectables_using_cursor (EditorCursor *cursor, bool after)
{
samplepos_t start;
samplepos_t end;
timepos_t start;
timepos_t end;
list<Selectable *> touched;
if (after) {
start = cursor->current_sample();
end = _session->current_end_sample();
start = timepos_t (cursor->current_sample());
end = timepos_t (_session->current_end_sample());
} else {
if (cursor->current_sample() > 0) {
start = 0;
end = cursor->current_sample() - 1;
start = timepos_t();
end = timepos_t (cursor->current_sample() - 1);
} else {
return;
}
@ -2170,17 +2172,17 @@ Editor::select_all_selectables_using_cursor (EditorCursor *cursor, bool after)
void
Editor::select_all_selectables_using_edit (bool after, bool from_context_menu)
{
samplepos_t start;
samplepos_t end;
timepos_t start;
timepos_t end;
list<Selectable *> touched;
if (after) {
start = get_preferred_edit_position(EDIT_IGNORE_NONE, from_context_menu);
end = _session->current_end_sample();
end = timepos_t (_session->current_end_sample());
} else {
if ((end = get_preferred_edit_position(EDIT_IGNORE_NONE, from_context_menu)) > 1) {
start = 0;
end -= 1;
start = timepos_t ();
end = end.decrement();
} else {
return;
}
@ -2221,8 +2223,8 @@ Editor::select_all_selectables_using_edit (bool after, bool from_context_menu)
void
Editor::select_all_selectables_between (bool within)
{
samplepos_t start;
samplepos_t end;
timepos_t start;
timepos_t end;
list<Selectable *> touched;
if (!get_edit_op_range (start, end)) {
@ -2268,8 +2270,8 @@ Editor::get_regionviews_at_or_after (samplepos_t pos, RegionSelection& regions)
void
Editor::select_range_between ()
{
samplepos_t start;
samplepos_t end;
timepos_t start;
timepos_t end;
if (!selection->time.empty()) {
selection->clear_time ();
@ -2289,18 +2291,18 @@ Editor::select_range_between ()
}
bool
Editor::get_edit_op_range (samplepos_t& start, samplepos_t& end) const
Editor::get_edit_op_range (timepos_t& start, timepos_t& end) const
{
/* if an explicit range exists, use it */
if ((mouse_mode == MouseRange || get_smart_mode()) && !selection->time.empty()) {
/* we know that these are ordered */
start = selection->time.start();
end = selection->time.end_sample();
start = selection->time.start_time();
end = selection->time.end_time();
return true;
} else {
start = 0;
end = 0;
start = timepos_t ();
end = timepos_t ();
return false;
}
}
@ -2314,7 +2316,7 @@ Editor::deselect_all ()
}
long
Editor::select_range (samplepos_t s, samplepos_t e)
Editor::select_range (timepos_t const & s, timepos_t const & e)
{
begin_reversible_selection_op (X_("Select Range"));
selection->add (clicked_axisview);

View File

@ -193,7 +193,7 @@ EditorSources::EditorSources (Editor* e)
/* show path as the row tooltip */
_display.set_tooltip_column (6); /* path */
}
/* set the color of the name field */
TreeViewColumn* tv_col = _display.get_column(0);
CellRendererText* renderer = dynamic_cast<CellRendererText*>(_display.get_column_cell_renderer (0));
@ -402,9 +402,9 @@ EditorSources::populate_row (TreeModel::Row row, boost::shared_ptr<ARDOUR::Regio
if (region->data_type() == DataType::MIDI) {
row[_columns.channels] = 0; /*TODO: some better recognition of midi regions*/
} else {
row[_columns.channels] = region->n_channels();
row[_columns.channels] = region->sources().size();
}
/* CAPTURED FOR */
row[_columns.captd_for] = source->captured_for();
@ -552,10 +552,10 @@ EditorSources::selection_changed ()
if ((iter = _model->get_iter (*i))) {
/* highlight any regions in the editor that use this region's source */
boost::shared_ptr<ARDOUR::Region> region = (*iter)[_columns.region];
if (!region) continue;
boost::shared_ptr<ARDOUR::Region> region = (*iter)[_columns.region];
if (!region) continue;
boost::shared_ptr<ARDOUR::Source> source = region->source();
boost::shared_ptr<ARDOUR::Source> source = region->source();
if (source) {
set<boost::shared_ptr<Region> > regions;
@ -588,12 +588,12 @@ EditorSources::clock_format_changed ()
}
void
EditorSources::format_position (samplepos_t pos, char* buf, size_t bufsize, bool onoff)
EditorSources::format_position (timepos_t const & pos, char* buf, size_t bufsize, bool onoff)
{
Temporal::BBT_Time bbt;
Timecode::Time timecode;
if (pos < 0) {
if (pos.negative()) {
error << string_compose (_("EditorSources::format_position: negative timecode position: %1"), pos) << endmsg;
snprintf (buf, bufsize, "invalid");
return;
@ -601,12 +601,13 @@ EditorSources::format_position (samplepos_t pos, char* buf, size_t bufsize, bool
switch (ARDOUR_UI::instance()->primary_clock->mode ()) {
case AudioClock::BBT:
bbt = _session->tempo_map().bbt_at_sample (pos);
if (onoff) {
snprintf (buf, bufsize, "%03d|%02d|%04d" , bbt.bars, bbt.beats, bbt.ticks);
} else {
snprintf (buf, bufsize, "(%03d|%02d|%04d)" , bbt.bars, bbt.beats, bbt.ticks);
}
#warning NUTEMPO needs tempo map BBT API
// bbt = _session->tempo_map().bbt_at_sample (pos);
// if (onoff) {
// snprintf (buf, bufsize, "%03d|%02d|%04d" , bbt.bars, bbt.beats, bbt.ticks);
// } else {
// snprintf (buf, bufsize, "(%03d|%02d|%04d)" , bbt.bars, bbt.beats, bbt.ticks);
// }
break;
case AudioClock::MinSec:
@ -615,7 +616,7 @@ EditorSources::format_position (samplepos_t pos, char* buf, size_t bufsize, bool
int mins;
float secs;
left = pos;
left = pos.samples();
hrs = (int) floor (left / (_session->sample_rate() * 60.0f * 60.0f));
left -= (samplecnt_t) floor (hrs * _session->sample_rate() * 60.0f * 60.0f);
mins = (int) floor (left / (_session->sample_rate() * 60.0f));
@ -630,23 +631,23 @@ EditorSources::format_position (samplepos_t pos, char* buf, size_t bufsize, bool
case AudioClock::Seconds:
if (onoff) {
snprintf (buf, bufsize, "%.1f", pos / (float)_session->sample_rate());
snprintf (buf, bufsize, "%.1f", pos.samples() / (float)_session->sample_rate());
} else {
snprintf (buf, bufsize, "(%.1f)", pos / (float)_session->sample_rate());
snprintf (buf, bufsize, "(%.1f)", pos.samples() / (float)_session->sample_rate());
}
break;
case AudioClock::Samples:
if (onoff) {
snprintf (buf, bufsize, "%" PRId64, pos);
snprintf (buf, bufsize, "%" PRId64, pos.samples());
} else {
snprintf (buf, bufsize, "(%" PRId64 ")", pos);
snprintf (buf, bufsize, "(%" PRId64 ")", pos.samples());
}
break;
case AudioClock::Timecode:
default:
_session->timecode_time (pos, timecode);
_session->timecode_time (pos.samples(), timecode);
if (onoff) {
snprintf (buf, bufsize, "%02d:%02d:%02d:%02d", timecode.hours, timecode.minutes, timecode.seconds, timecode.frames);
} else {
@ -729,9 +730,9 @@ EditorSources::remove_selected_sources ()
boost::shared_ptr<ARDOUR::Region> region = (*iter)[_columns.region];
if (!region) continue;
if (!region) continue;
boost::shared_ptr<ARDOUR::Source> source = region->source();
boost::shared_ptr<ARDOUR::Source> source = region->source();
if (source) {
set<boost::shared_ptr<Region> > regions;
RegionFactory::get_regions_using_source (source, regions);

View File

@ -82,7 +82,7 @@ private:
Gtk::TreeModelColumn<std::string> natural_pos;
Gtk::TreeModelColumn<std::string> path;
Gtk::TreeModelColumn<std::string> take_id;
Gtk::TreeModelColumn<samplepos_t> natural_s;
Gtk::TreeModelColumn<Temporal::timepos_t> natural_s;
Gtk::TreeModelColumn<size_t> captd_xruns;
};
@ -121,7 +121,7 @@ private:
void show_context_menu (int button, int time);
void format_position (ARDOUR::samplepos_t pos, char* buf, size_t bufsize, bool onoff = true);
void format_position (Temporal::timepos_t const & pos, char* buf, size_t bufsize, bool onoff = true);
void add_source (boost::shared_ptr<ARDOUR::Region>);
void remove_source (boost::shared_ptr<ARDOUR::Source>);

View File

@ -99,11 +99,14 @@ Editor::embed_audio_from_video (std::string path, samplepos_t n, bool lock_posit
boost::shared_ptr<ARDOUR::Track> track;
std::string const& gid = ARDOUR::Playlist::generate_pgroup_id ();
bool ok = (import_sndfiles (paths, Editing::ImportDistinctFiles, Editing::ImportAsTrack, ARDOUR::SrcBest, n, 1, 1, track, gid, false) == 0);
Temporal::timepos_t pos (n);
bool ok = (import_sndfiles (paths, Editing::ImportDistinctFiles, Editing::ImportAsTrack, ARDOUR::SrcBest, pos, 1, 1, track, gid, false) == 0);
if (ok && track) {
if (lock_position_to_video) {
boost::shared_ptr<ARDOUR::Playlist> pl = track->playlist();
pl->find_next_region (Temporal::timepos_t (n), ARDOUR::End, 0)->set_video_locked (true);
pl->find_next_region (pos, ARDOUR::End, 0)->set_video_locked (true);
}
_session->save_state ("", true);
}

View File

@ -97,7 +97,7 @@ ExportDialog::set_session (ARDOUR::Session* s)
TimeSelection const & time (editor.get_selection().time);
if (!time.empty()) {
profile_manager->set_selection_range (time.front().start, time.front().end);
profile_manager->set_selection_range (time.front().start().samples(), time.front().end().samples());
} else {
profile_manager->set_selection_range ();
}
@ -584,7 +584,7 @@ ExportRegionDialog::init_gui ()
void
ExportRegionDialog::init_components ()
{
string loc_id = profile_manager->set_single_range (region.nt_position(), region.nt_position() + region.nt_length(), region.name());
string loc_id = profile_manager->set_single_range (region.position_sample(), (region.nt_position() + region.nt_length()).samples(), region.name());
preset_selector.reset (new ExportPresetSelector ());
timespan_selector.reset (new ExportTimespanSelectorSingle (_session, profile_manager, loc_id));

View File

@ -994,7 +994,7 @@ void
ExportFormatDialog::update_clock (AudioClock& clock, ARDOUR::AnyTime const& time)
{
// TODO position
clock.set (_session->convert_to_samples (time), true);
clock.set (timepos_t (_session->convert_to_samples (time)), true);
AudioClock::Mode mode (AudioClock::Timecode);
@ -1023,26 +1023,26 @@ ExportFormatDialog::update_time (AnyTime& time, AudioClock const& clock)
return;
}
samplecnt_t samples = clock.current_duration ();
samplecnt_t samples = clock.current_duration().samples();
switch (clock.mode ()) {
case AudioClock::Timecode:
time.type = AnyTime::Timecode;
_session->timecode_time (samples, time.timecode);
break;
case AudioClock::BBT:
time.type = AnyTime::BBT;
_session->bbt_time (samples, time.bbt);
break;
case AudioClock::Seconds:
case AudioClock::MinSec:
time.type = AnyTime::Seconds;
time.seconds = (double)samples / _session->sample_rate ();
break;
case AudioClock::Samples:
time.type = AnyTime::Samples;
time.samples = samples;
break;
case AudioClock::Timecode:
time.type = AnyTime::Timecode;
_session->timecode_time (samples, time.timecode);
break;
case AudioClock::BBT:
time.type = AnyTime::BBT;
_session->bbt_time (samples, time.bbt);
break;
case AudioClock::Seconds:
case AudioClock::MinSec:
time.type = AnyTime::Seconds;
time.seconds = (double)samples / _session->sample_rate ();
break;
case AudioClock::Samples:
time.type = AnyTime::Samples;
time.samples = samples;
break;
}
}

View File

@ -171,7 +171,7 @@ ExportReport::init (const AnalysisResults & ar, bool with_file)
clock = manage (new AudioClock ("sfboxLengthClock", true, "", false, false, true, false));
clock->set_session (_session);
clock->set_mode (AudioClock::MinSec);
clock->set (info.length * src_coef + 0.5, true);
clock->set_duration (timecnt_t (samplecnt_t (info.length * src_coef + 0.5)), true);
t->attach (*clock, 3, 4, 2, 3);
l = manage (new Label (_("Timecode:"), ALIGN_END));
@ -179,7 +179,7 @@ ExportReport::init (const AnalysisResults & ar, bool with_file)
clock = manage (new AudioClock ("sfboxTimecodeClock", true, "", false, false, false, false));
clock->set_session (_session);
clock->set_mode (AudioClock::Timecode);
clock->set (info.timecode * src_coef + 0.5, true);
clock->set_duration (timecnt_t (samplecnt_t (info.timecode * src_coef + 0.5)), true);
t->attach (*clock, 3, 4, 3, 4);
} else if (with_file) {
with_file = false;
@ -918,13 +918,13 @@ ExportReport::audition (std::string path, unsigned n_chn, int page)
PBD::PropertyList plist;
plist.add (ARDOUR::Properties::start, 0);
plist.add (ARDOUR::Properties::length, srclist[0]->length(srclist[0]->natural_position()));
plist.add (ARDOUR::Properties::length, srclist[0]->length ());
plist.add (ARDOUR::Properties::name, rname);
plist.add (ARDOUR::Properties::layer, 0);
r = boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (srclist, plist, false));
r->set_position(0);
r->set_position (timepos_t ());
_session->audition_region(r);
_audition_num = page;
}

View File

@ -142,7 +142,7 @@ ExportTimespanSelector::location_sorter(Gtk::TreeModel::iterator a, Gtk::TreeMod
if (l2 == ls)
return +1;
return l1->start() - l2->start();
return l2->start().distance (l1->start()).samples();
}
void
@ -157,7 +157,7 @@ ExportTimespanSelector::add_range_to_selection (ARDOUR::Location const * loc, bo
id = loc->id().to_s();
}
span->set_range (loc->start(), loc->end());
span->set_range (loc->start().samples(), loc->end().samples());
span->set_name (loc->name());
span->set_range_id (id);
span->set_realtime (rt);
@ -226,8 +226,8 @@ ExportTimespanSelector::construct_label (ARDOUR::Location const * location) cons
std::string start;
std::string end;
samplepos_t start_sample = location->start();
samplepos_t end_sample = location->end();
samplepos_t start_sample = location->start().samples();
samplepos_t end_sample = location->end().samples();
switch (state->time_format) {
case ExportProfileManager::BBT:
@ -269,23 +269,23 @@ ExportTimespanSelector::construct_length (ARDOUR::Location const * location) con
switch (state->time_format) {
case ExportProfileManager::BBT:
s << bbt_str (location->length ());
s << bbt_str (location->length ().samples());
break;
case ExportProfileManager::Timecode:
{
Timecode::Time tc;
_session->timecode_duration (location->length(), tc);
_session->timecode_duration (location->length().samples(), tc);
tc.print (s);
break;
}
case ExportProfileManager::MinSec:
s << ms_str (location->length ());
s << ms_str (location->length ().samples());
break;
case ExportProfileManager::Samples:
s << location->length ();
s << location->length ().samples();
break;
}
@ -465,10 +465,10 @@ ExportTimespanSelectorSingle::fill_range_list ()
row[range_cols.label] = construct_label (*it);
row[range_cols.length] = construct_length (*it);
//the actual samplecnt_t for sorting
row[range_cols.length_actual] = (*it)->length();
row[range_cols.length_actual] = (*it)->length().samples();
//start samplecnt_t for sorting
row[range_cols.start] = (*it)->start();
row[range_cols.start] = (*it)->start().samples();
Glib::DateTime gdt(Glib::DateTime::create_now_local ((*it)->timestamp()));
row[range_cols.timestamp] = (*it)->timestamp();
@ -578,10 +578,10 @@ ExportTimespanSelectorMultiple::fill_range_list ()
row[range_cols.label] = construct_label (*it);
row[range_cols.length] = construct_length (*it);
//the actual samplecnt_t for sorting
row[range_cols.length_actual] = (*it)->length();
row[range_cols.length_actual] = (*it)->length().samples();
//start samplecnt_t for sorting
row[range_cols.start] = (*it)->start();
row[range_cols.start] = (*it)->start().samples();
Glib::DateTime gdt(Glib::DateTime::create_now_local ((*it)->timestamp()));
row[range_cols.timestamp] = (*it)->timestamp();

View File

@ -729,13 +729,13 @@ GainMeterBase::meter_point_clicked (MeterPoint mp)
void
GainMeterBase::amp_start_touch ()
{
_control->start_touch (_control->session().transport_sample());
_control->start_touch (timepos_t (_control->session().transport_sample()));
}
void
GainMeterBase::amp_stop_touch ()
{
_control->stop_touch (_control->session().transport_sample());
_control->stop_touch (timepos_t (_control->session().transport_sample()));
effective_gain_display ();
}

View File

@ -74,16 +74,16 @@ InsertRemoveTimeDialog::InsertRemoveTimeDialog (PublicEditor& e, bool remove)
//if a Range is selected, assume the user wants to insert/remove the length of the range
if ( _editor.get_selection().time.length() != 0 ) {
position_clock.set ( _editor.get_selection().time.start(), true );
duration_clock.set ( _editor.get_selection().time.end_sample(), true, _editor.get_selection().time.start() );
duration_clock.set_bbt_reference (_editor.get_selection().time.start());
position_clock.set (_editor.get_selection().time.start_time(), true);
duration_clock.set (_editor.get_selection().time.end_time(), true, timecnt_t (_editor.get_selection().time.start_time()));
duration_clock.set_bbt_reference (_editor.get_selection().time.start_time());
} else {
samplepos_t const pos = _editor.get_preferred_edit_position (EDIT_IGNORE_MOUSE);
position_clock.set ( pos, true );
timepos_t const pos = _editor.get_preferred_edit_position (EDIT_IGNORE_MOUSE);
position_clock.set (pos, true);
duration_clock.set_bbt_reference (pos);
duration_clock.set (0);
duration_clock.set (timepos_t());
}
if (!remove) {
Label* intersected_label = manage (new Label (_("Intersected regions should:")));
intersected_label->set_alignment (1, 0.5);
@ -190,16 +190,16 @@ InsertRemoveTimeDialog::move_locked_markers () const
return _move_locked_markers.get_active ();
}
samplepos_t
timepos_t
InsertRemoveTimeDialog::position () const
{
return position_clock.current_time();
}
samplepos_t
timecnt_t
InsertRemoveTimeDialog::distance () const
{
return duration_clock.current_duration ( position_clock.current_time() );
return duration_clock.current_duration (position_clock.current_time());
}
void

View File

@ -33,8 +33,8 @@ public:
bool move_glued_markers () const;
bool move_locked_markers () const;
bool move_tempos () const;
samplepos_t position () const;
samplepos_t distance () const;
Temporal::timepos_t position () const;
Temporal::timecnt_t distance () const;
private:
void move_markers_toggled ();

View File

@ -259,7 +259,7 @@ LocationEditRow::set_location (Location *loc)
}
hide_check_button.set_active (location->is_hidden());
lock_check_button.set_active (location->locked());
glue_check_button.set_active (location->position_lock_style() == MusicTime);
glue_check_button.set_active (location->position_time_domain() == Temporal::BeatTime);
if (location->is_auto_loop() || location-> is_auto_punch()) {
// use label instead of entry
@ -315,7 +315,7 @@ LocationEditRow::set_location (Location *loc)
}
end_clock.set (location->end(), true);
length_clock.set (location->length(), true);
length_clock.set_duration (location->length(), true);
end_clock.show();
length_clock.show();
@ -355,7 +355,7 @@ LocationEditRow::set_location (Location *loc)
location->Changed.connect (connections, invalidator (*this), boost::bind (&LocationEditRow::location_changed, this), gui_context());
location->FlagsChanged.connect (connections, invalidator (*this), boost::bind (&LocationEditRow::flags_changed, this), gui_context());
location->LockChanged.connect (connections, invalidator (*this), boost::bind (&LocationEditRow::lock_changed, this), gui_context());
location->PositionLockStyleChanged.connect (connections, invalidator (*this), boost::bind (&LocationEditRow::position_lock_style_changed, this), gui_context());
location->TimeDomainChanged.connect (connections, invalidator (*this), boost::bind (&LocationEditRow::time_domain_changed, this), gui_context());
}
void
@ -422,14 +422,12 @@ LocationEditRow::to_playhead_button_pressed (LocationPart part)
return;
}
const int32_t divisions = PublicEditor::instance().get_grid_music_divisions (0);
switch (part) {
case LocStart:
location->set_start (_session->transport_sample (), false, true, divisions);
location->set_start (timepos_t (_session->transport_sample ()), false);
break;
case LocEnd:
location->set_end (_session->transport_sample (), false, true,divisions);
location->set_end (timepos_t (_session->transport_sample ()), false);
if (location->is_session_range()) {
_session->set_session_range_is_free (false);
}
@ -444,10 +442,10 @@ LocationEditRow::locate_button_pressed (LocationPart part)
{
switch (part) {
case LocStart:
_session->request_locate (start_clock.current_time());
_session->request_locate (start_clock.current_time().samples());
break;
case LocEnd:
_session->request_locate (end_clock.current_time());
_session->request_locate (end_clock.current_time().samples());
break;
default:
break;
@ -458,7 +456,7 @@ bool
LocationEditRow::locate_to_clock (GdkEventButton* ev, AudioClock* clock)
{
if (Keyboard::is_button2_event (ev)) {
_session->request_locate (clock->current_time());
_session->request_locate (clock->current_time().samples());
return true;
}
return false;
@ -471,20 +469,18 @@ LocationEditRow::clock_changed (LocationPart part)
return;
}
const int32_t divisions = PublicEditor::instance().get_grid_music_divisions (0);
switch (part) {
case LocStart:
location->set_start (start_clock.current_time(), false, true, divisions);
location->set_start (start_clock.current_time(), false);
break;
case LocEnd:
location->set_end (end_clock.current_time(), false, true, divisions);
location->set_end (end_clock.current_time(), false);
if (location->is_session_range()) {
_session->set_session_range_is_free (false);
}
break;
case LocLength:
location->set_end (location->start() + length_clock.current_duration(), false, true, divisions);
location->set_end (location->start() + length_clock.current_duration(), false);
if (location->is_session_range()) {
_session->set_session_range_is_free (false);
}
@ -572,10 +568,10 @@ LocationEditRow::glue_toggled ()
return;
}
if (location->position_lock_style() == AudioTime) {
location->set_position_lock_style (MusicTime);
if (location->position_time_domain() == Temporal::AudioTime) {
location->set_position_time_domain (Temporal::BeatTime);
} else {
location->set_position_lock_style (AudioTime);
location->set_position_time_domain (Temporal::AudioTime);
}
}
@ -627,7 +623,7 @@ LocationEditRow::end_changed ()
i_am_the_modifier++;
end_clock.set (location->end());
length_clock.set (location->length());
length_clock.set_duration (location->length());
i_am_the_modifier--;
}
@ -670,7 +666,7 @@ LocationEditRow::location_changed ()
start_clock.set (location->start());
end_clock.set (location->end());
length_clock.set (location->length());
length_clock.set_duration (location->length());
set_clock_editable_status ();
@ -689,7 +685,7 @@ LocationEditRow::flags_changed ()
cd_check_button.set_active (location->is_cd_marker());
hide_check_button.set_active (location->is_hidden());
glue_check_button.set_active (location->position_lock_style() == MusicTime);
glue_check_button.set_active (location->position_time_domain() == Temporal::BeatTime);
i_am_the_modifier--;
}
@ -711,7 +707,7 @@ LocationEditRow::lock_changed ()
}
void
LocationEditRow::position_lock_style_changed ()
LocationEditRow::time_domain_changed ()
{
if (!location) {
return;
@ -719,7 +715,7 @@ LocationEditRow::position_lock_style_changed ()
i_am_the_modifier++;
glue_check_button.set_active (location->position_lock_style() == MusicTime);
glue_check_button.set_active (location->position_time_domain() == Temporal::BeatTime);
i_am_the_modifier--;
}
@ -1040,7 +1036,7 @@ LocationUI::add_new_location()
string markername;
if (_session) {
samplepos_t where = _session->audible_sample();
timepos_t where (_session->audible_sample());
_session->locations()->next_available_name(markername,"mark");
Location *location = new Location (*_session, where, where, markername, Location::IsMark);
if (UIConfiguration::instance().get_name_new_markers()) {
@ -1062,7 +1058,7 @@ LocationUI::add_new_range()
string rangename;
if (_session) {
samplepos_t where = _session->audible_sample();
timepos_t where (_session->audible_sample());
_session->locations()->next_available_name(rangename,"unnamed");
Location *location = new Location (*_session, where, where, rangename, Location::IsRangeMarker);
PublicEditor::instance().begin_reversible_command (_("add range marker"));

View File

@ -146,7 +146,7 @@ protected:
void location_changed ();
void flags_changed ();
void lock_changed ();
void position_lock_style_changed ();
void time_domain_changed ();
void set_clock_editable_status ();
void show_cd_track_details ();

View File

@ -846,14 +846,16 @@ LuaInstance::register_classes (lua_State* L)
.beginClass <RegionSelection> ("RegionSelection")
.addFunction ("start", &RegionSelection::start)
.addFunction ("end_sample", &RegionSelection::end_sample)
.addFunction ("start_time", &RegionSelection::start_time)
.addFunction ("end_time", &RegionSelection::end_time)
.addFunction ("n_midi_regions", &RegionSelection::n_midi_regions)
.addFunction ("regionlist", &RegionSelection::regionlist) // XXX check windows binding (libardour)
.endClass ()
.deriveClass <TimeSelection, std::list<ARDOUR::TimelineRange> > ("TimeSelection")
.addFunction ("start", &TimeSelection::start)
.addFunction ("start_time", &TimeSelection::start_time)
.addFunction ("end_time", &TimeSelection::end_time)
.addFunction ("start_sample", &TimeSelection::start_sample)
.addFunction ("end_sample", &TimeSelection::end_sample)
.addFunction ("length", &TimeSelection::length)
.endClass ()

View File

@ -94,7 +94,7 @@ MainClock::build_ops_menu ()
ops_items.push_back (MenuElem (_("Insert Meter Change"), sigc::mem_fun(*this, &MainClock::insert_new_meter)));
}
samplepos_t
timepos_t
MainClock::absolute_time () const
{
if (get_is_duration ()) {
@ -119,15 +119,15 @@ MainClock::set (timepos_t const & when, bool force, timecnt_t const & /*offset*/
switch (mode) {
case NoDelta:
AudioClock::set (when, force, 0);
AudioClock::set (when, force);
break;
case DeltaEditPoint:
AudioClock::set (when, force, PublicEditor::instance().get_preferred_edit_position (Editing::EDIT_IGNORE_PHEAD));
AudioClock::set (when, force, timecnt_t (PublicEditor::instance().get_preferred_edit_position (Editing::EDIT_IGNORE_PHEAD)));
break;
case DeltaOriginMarker:
{
Location* loc = PublicEditor::instance().session()->locations()->clock_origin_location ();
AudioClock::set (when, force, loc ? loc->start() : 0);
AudioClock::set (when, force, loc ? timecnt_t (loc->start()) : timecnt_t());
}
break;
}
@ -150,16 +150,18 @@ void
MainClock::edit_current_tempo ()
{
if (!PublicEditor::instance().session()) return;
ARDOUR::TempoSection* ts = const_cast<ARDOUR::TempoSection*>(&PublicEditor::instance().session()->tempo_map().tempo_section_at_sample (absolute_time()));
PublicEditor::instance().edit_tempo_section (ts);
#warning NUTEMPO needs new map API
//ARDOUR::TempoSection* ts = const_cast<ARDOUR::TempoSection*>(&PublicEditor::instance().session()->tempo_map().tempo_section_at_sample (absolute_time()));
//PublicEditor::instance().edit_tempo_section (ts);
}
void
MainClock::edit_current_meter ()
{
if (!PublicEditor::instance().session()) return;
ARDOUR::MeterSection* ms = const_cast<ARDOUR::MeterSection*>(&PublicEditor::instance().session()->tempo_map().meter_section_at_sample (absolute_time()));
PublicEditor::instance().edit_meter_section (ms);
#warning NUTEMPO needs new map API
//ARDOUR::MeterSection* ms = const_cast<ARDOUR::MeterSection*>(&PublicEditor::instance().session()->tempo_map().meter_section_at_sample (absolute_time()));
//PublicEditor::instance().edit_meter_section (ms);
}
void

View File

@ -29,7 +29,7 @@ class MainClock : public AudioClock
{
public:
MainClock (const std::string& clock_name, const std::string& widget_name, bool primary);
samplepos_t absolute_time () const;
Temporal::timepos_t absolute_time () const;
void set_session (ARDOUR::Session *s);
void set (Temporal::timepos_t const &, bool force = false, Temporal::timecnt_t const & offset = Temporal::timecnt_t ());

View File

@ -37,9 +37,8 @@ MidiAutomationLine::MidiAutomationLine (
ArdourCanvas::Item& parent,
boost::shared_ptr<ARDOUR::AutomationList> list,
boost::shared_ptr<ARDOUR::MidiRegion> region,
Evoral::Parameter parameter,
Evoral::TimeConverter<double, ARDOUR::samplepos_t>* converter)
: AutomationLine (name, tav, parent, list, parameter, converter)
Evoral::Parameter parameter)
: AutomationLine (name, tav, parent, list, parameter, Temporal::DistanceMeasure (Temporal::timepos_t()))
, _region (region)
, _parameter (parameter)
{

View File

@ -2520,13 +2520,13 @@ MidiRegionView::move_selection(timecnt_t const & dx_qn, double dy, double cumula
double dx = 0.0;
if (midi_view()->note_mode() == Sustained) {
dx = editor->time_to_pixel_unrounded ((note_time_qn + dx_qn))
dx = editor->time_to_pixel_unrounded (timepos_t (note_time_qn + dx_qn.beats()))
- n->item()->item_to_canvas (ArdourCanvas::Duple (n->x0(), 0)).x;
} else {
/* Hit::x0() is offset by _position.x, unlike Note::x0() */
Hit* hit = dynamic_cast<Hit*>(n);
if (hit) {
dx = editor->time_to_pixel_unrounded ((note_time_qn + dx_qn))
dx = editor->time_to_pixel_unrounded (timepos_t (note_time_qn + dx_qn.beats()))
- n->item()->item_to_canvas (ArdourCanvas::Duple (((hit->x0() + hit->x1()) / 2.0) - hit->position().x, 0)).x;
}
}
@ -2536,7 +2536,7 @@ MidiRegionView::move_selection(timecnt_t const & dx_qn, double dy, double cumula
/* update length */
if (midi_view()->note_mode() == Sustained) {
Note* sus = dynamic_cast<Note*> (*i);
double const len_dx = editor->time_to_pixel_unrounded ((note_time_qn + dx_qn + n->note()->length()));
double const len_dx = editor->time_to_pixel_unrounded (timepos_t (note_time_qn) + dx_qn + n->note()->length());
sus->set_x1 (n->item()->canvas_to_item (ArdourCanvas::Duple (len_dx, 0)).x);
}
@ -2604,7 +2604,6 @@ MidiRegionView::move_copies (timecnt_t const & dx_qn, double dy, double cumulati
{
typedef vector<boost::shared_ptr<NoteType> > PossibleChord;
Editor* editor = dynamic_cast<Editor*> (&trackview.editor());
TempoMap& tmap (editor->session()->tempo_map());
PossibleChord to_play;
Temporal::Beats earliest = earliest_in_selection();
@ -2614,16 +2613,16 @@ MidiRegionView::move_copies (timecnt_t const & dx_qn, double dy, double cumulati
to_play.push_back (n->note());
}
timepos_t const note_time_qn = _region->source_beats_to_absolute_beats (n->note()->time());
timecnt_t dx (dx_qn.time_domain());
timepos_t const note_time_qn = _region->source_beats_to_absolute_time (n->note()->time());
double_t dx = 0;
if (midi_view()->note_mode() == Sustained) {
dx = editor->sample_to_pixel_unrounded (tmap.sample_at_quarter_note (note_time_qn + dx_qn))
dx = editor->time_to_pixel_unrounded (timepos_t (note_time_qn) + dx_qn)
- n->item()->item_to_canvas (ArdourCanvas::Duple (n->x0(), 0)).x;
} else {
Hit* hit = dynamic_cast<Hit*>(n);
if (hit) {
dx = editor->sample_to_pixel_unrounded (tmap.sample_at_quarter_note (note_time_qn + dx_qn))
dx = editor->time_to_pixel_unrounded (timepos_t (note_time_qn) + dx_qn)
- n->item()->item_to_canvas (ArdourCanvas::Duple (((hit->x0() + hit->x1()) / 2.0) - hit->position().x, 0)).x;
}
}
@ -2632,7 +2631,7 @@ MidiRegionView::move_copies (timecnt_t const & dx_qn, double dy, double cumulati
if (midi_view()->note_mode() == Sustained) {
Note* sus = dynamic_cast<Note*> (*i);
double const len_dx = editor->sample_to_pixel_unrounded (tmap.sample_at_quarter_note (note_time_qn + dx_qn + n->note()->length()));
double const len_dx = editor->time_to_pixel_unrounded (timepos_t (note_time_qn) + dx_qn + n->note()->length());
sus->set_x1 (n->item()->canvas_to_item (ArdourCanvas::Duple (len_dx, 0)).x);
}
@ -2696,7 +2695,7 @@ MidiRegionView::note_dropped(NoteBase *, timecnt_t const & d_qn, int8_t dnote, b
for (Selection::iterator i = _selection.begin(); i != _selection.end() ; ++i) {
Temporal::Beats new_time = Temporal::Beats ((*i)->note()->time() + d_qn);
Temporal::Beats new_time = (*i)->note()->time() + d_qn.beats ();
if (new_time < Temporal::Beats()) {
continue;
@ -2735,7 +2734,7 @@ MidiRegionView::note_dropped(NoteBase *, timecnt_t const & d_qn, int8_t dnote, b
for (CopyDragEvents::iterator i = _copy_drag_events.begin(); i != _copy_drag_events.end() ; ++i) {
/* update time */
Temporal::Beats new_time = (*i)->note()->time() + d_qn;
Temporal::Beats new_time = (*i)->note()->time() + d_qn.beats();
if (new_time < Temporal::Beats()) {
continue;
@ -2959,7 +2958,7 @@ MidiRegionView::update_resizing (NoteBase* primary, bool at_front, double delta_
cursor_set = true;
trackview.editor().set_snapped_cursor_position ((snapped_x + midi_region()->nt_position()).samples());
trackview.editor().set_snapped_cursor_position (snapped_x + midi_region()->nt_position());
}
}
@ -2973,7 +2972,6 @@ void
MidiRegionView::commit_resizing (NoteBase* primary, bool at_front, double delta_x, bool relative, double snap_delta, bool with_snap)
{
_note_diff_command = _model->new_note_diff_command (_("resize notes"));
TempoMap& tmap (trackview.session()->tempo_map());
/* XX why doesn't snap_pixel_to_sample() handle this properly? */
bool const ensure_snap = trackview.editor().snap_mode () != SnapMagnetic;

View File

@ -507,7 +507,7 @@ MidiStreamView::setup_rec_box ()
*/
region->set_start (timecnt_t (_trackview.track()->current_capture_start()
- _trackview.track()->get_capture_start_sample (0)));
region->set_position (_trackview.track()->current_capture_start ().samples());
region->set_position (_trackview.track()->current_capture_start ());
RegionView* rv = add_region_view_internal (region, false, true);
MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (rv);
@ -627,7 +627,7 @@ MidiStreamView::update_rec_box ()
/* Update the region being recorded to reflect where we currently are */
boost::shared_ptr<ARDOUR::Region> region = rec_regions.back().first;
region->set_length (_trackview.track()->current_capture_end () - _trackview.track()->current_capture_start(), 0);
region->set_length (timecnt_t (_trackview.track()->current_capture_end () - _trackview.track()->current_capture_start()));
MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (rec_regions.back().second);
mrv->extend_active_notes ();
@ -679,7 +679,7 @@ struct RegionPositionSorter {
};
bool
MidiStreamView::paste (timepos_t const & pos, const Selection& selection, PasteContext& ctx, const int32_t sub_num)
MidiStreamView::paste (timepos_t const & pos, const Selection& selection, PasteContext& ctx)
{
/* Paste into the first region which starts on or before pos. Only called when
using an internal editing tool. */
@ -702,12 +702,12 @@ MidiStreamView::paste (timepos_t const & pos, const Selection& selection, PasteC
boost::shared_ptr<Region> r = (*prev)->region ();
/* If *prev doesn't cover pos, it's no good */
if (r->position() > pos || ((r->position() + r->length()) < pos)) {
if (r->nt_position() > pos || ((r->nt_position() + r->nt_length()) < pos)) {
return false;
}
MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (*prev);
return mrv ? mrv->paste(pos, selection, ctx, sub_num) : false;
return mrv ? mrv->paste(pos, selection, ctx) : false;
}
void

View File

@ -107,7 +107,7 @@ public:
RegionView* create_region_view (boost::shared_ptr<ARDOUR::Region>, bool, bool);
bool paste (ARDOUR::samplepos_t pos, const Selection& selection, PasteContext& ctx, const int32_t sub_num);
bool paste (Temporal::timepos_t const & pos, const Selection& selection, PasteContext& ctx);
void apply_note_range(uint8_t lowest, uint8_t highest, bool to_region_views);

View File

@ -1640,17 +1640,17 @@ MidiTimeAxisView::automation_child_menu_item (Evoral::Parameter param)
}
boost::shared_ptr<MidiRegion>
MidiTimeAxisView::add_region (samplepos_t f, samplecnt_t length, bool commit)
MidiTimeAxisView::add_region (timepos_t const & f, timecnt_t const & length, bool commit)
{
Editor* real_editor = dynamic_cast<Editor*> (&_editor);
MusicSample pos (f, 0);
timepos_t pos (f);
if (commit) {
real_editor->begin_reversible_command (Operations::create_region);
}
playlist()->clear_changes ();
real_editor->snap_to (pos, RoundNearest);
real_editor->snap_to (pos, Temporal::RoundNearest);
boost::shared_ptr<Source> src = _session->create_midi_source_by_stealing_name (view()->trackview().track());
PropertyList plist;
@ -1660,9 +1660,8 @@ MidiTimeAxisView::add_region (samplepos_t f, samplecnt_t length, bool commit)
plist.add (ARDOUR::Properties::name, PBD::basename_nosuffix(src->name()));
boost::shared_ptr<Region> region = (RegionFactory::create (src, plist));
/* sets beat position */
region->set_position (pos.sample, pos.division);
playlist()->add_region (region, pos.sample, 1.0, false, pos.division);
region->set_position (pos);
playlist()->add_region (region, pos, 1.0, false);
_session->add_command (new StatefulDiffCommand (playlist()));
if (commit) {
@ -1737,14 +1736,14 @@ MidiTimeAxisView::contents_height_changed ()
}
bool
MidiTimeAxisView::paste (samplepos_t pos, const Selection& selection, PasteContext& ctx, const int32_t sub_num)
MidiTimeAxisView::paste (timepos_t const & pos, const Selection& selection, PasteContext& ctx)
{
if (!_editor.internal_editing()) {
// Non-internal paste, paste regions like any other route
return RouteTimeAxisView::paste(pos, selection, ctx, sub_num);
return RouteTimeAxisView::paste (pos, selection, ctx);
}
return midi_view()->paste(pos, selection, ctx, sub_num);
return midi_view()->paste (pos, selection, ctx);
}
void

View File

@ -299,7 +299,7 @@ RegionSelection::start_time () const
s = min (s, (*i)->region()->nt_position ());
}
if (s == timepos_t::max (front()->nt_position().time_domain())) {
if (s == timepos_t::max (front()->region()->nt_position().time_domain())) {
return timepos_t ();
}
@ -313,7 +313,7 @@ RegionSelection::end_time () const
return timepos_t ();
}
timepos_t e (timepos_t::zero (front()->nt_position().time_domain()));
timepos_t e (timepos_t::zero (front()->region()->nt_position().time_domain()));
for (RegionSelection::const_iterator i = begin(); i != end(); ++i) {
e = max (e, (*i)->region()->nt_end ());

View File

@ -1149,7 +1149,7 @@ RouteTimeAxisView::set_selected_regionviews (RegionSelection& regions)
* @param results List to add things to.
*/
void
RouteTimeAxisView::get_selectables (samplepos_t start, samplepos_t end, double top, double bot, list<Selectable*>& results, bool within)
RouteTimeAxisView::get_selectables (timepos_t const & start, timepos_t const & end, double top, double bot, list<Selectable*>& results, bool within)
{
if ((_view && ((top < 0.0 && bot < 0.0))) || touched (top, bot)) {
_view->get_selectables (start, end, top, bot, results, within);

View File

@ -58,7 +58,7 @@ using namespace PBD;
struct TimelineRangeComparator {
bool operator()(TimelineRange a, TimelineRange b) {
return a.start < b.start;
return a.start() < b.start();
}
};
@ -302,7 +302,7 @@ Selection::toggle (vector<RegionView*>& r)
}
long
Selection::toggle (samplepos_t start, samplepos_t end)
Selection::toggle (timepos_t const & start, timepos_t const & end)
{
clear_objects(); // enforce object/range exclusivity
@ -453,13 +453,13 @@ Selection::add (timepos_t const & start, timepos_t const & end)
void
Selection::move_time (timecnt_t const & distance)
{
if (distance == 0) {
if (distance.zero()) {
return;
}
for (list<TimelineRange>::iterator i = time.begin(); i != time.end(); ++i) {
(*i).start += distance;
(*i).end += distance;
(*i).start() += distance;
(*i).end() += distance;
}
TimeChanged ();
@ -720,8 +720,8 @@ Selection::set (timepos_t const & start, timepos_t const & end)
while (time.size() > 1) {
time.pop_front();
}
time.front().start = start;
time.front().end = end;
time.front().start() = start;
time.front().end() = end;
}
time.consolidate ();
@ -740,11 +740,11 @@ Selection::set (timepos_t const & start, timepos_t const & end)
* @param end New end time.
*/
void
Selection::set_preserving_all_ranges (samplepos_t start, samplepos_t end)
Selection::set_preserving_all_ranges (timepos_t const & start, timepos_t const & end)
{
clear_objects(); // enforce region/object exclusivity
if ((start == 0 && end == 0) || (end < start)) {
if ((start.zero() && end.zero()) || (end < start)) {
return;
}
@ -752,8 +752,8 @@ Selection::set_preserving_all_ranges (samplepos_t start, samplepos_t end)
time.push_back (TimelineRange (start, end, ++next_time_id));
} else {
time.sort (TimelineRangeComparator ());
time.front().start = start;
time.back().end = end;
time.front().set_start (start);
time.back().set_end (end);
}
time.consolidate ();
@ -1137,8 +1137,8 @@ Selection::get_state () const
for (TimeSelection::const_iterator i = time.begin(); i != time.end(); ++i) {
XMLNode* t = node->add_child (X_("TimelineRange"));
t->set_property (X_("start"), (*i).start);
t->set_property (X_("end"), (*i).end);
t->set_property (X_("start"), (*i).start());
t->set_property (X_("end"), (*i).end());
}
for (MarkerSelection::const_iterator i = markers.begin(); i != markers.end(); ++i) {
@ -1304,8 +1304,8 @@ Selection::set_state (XMLNode const & node, int)
}
} else if ((*i)->name() == X_("TimelineRange")) {
samplepos_t start;
samplepos_t end;
timepos_t start;
timepos_t end;
if (!(*i)->get_property (X_("start"), start) || !(*i)->get_property (X_("end"), end)) {
assert(false);

View File

@ -137,7 +137,7 @@ public:
void set (RegionView*, bool also_clear_tracks = true);
void set (std::vector<RegionView*>&);
long set (Temporal::timepos_t const &, Temporal::timepos_t const &);
void set_preserving_all_ranges (samplepos_t, samplepos_t);
void set_preserving_all_ranges (Temporal::timepos_t const &, Temporal::timepos_t const &);
void set (boost::shared_ptr<Evoral::ControlList>);
void set (boost::shared_ptr<ARDOUR::Playlist>);
void set (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
@ -151,7 +151,7 @@ public:
void toggle (RegionView*);
void toggle (MidiCutBuffer*);
void toggle (std::vector<RegionView*>&);
long toggle (samplepos_t, samplepos_t);
long toggle (Temporal::timepos_t const &, Temporal::timepos_t const &);
void toggle (ARDOUR::AutomationList*);
void toggle (boost::shared_ptr<ARDOUR::Playlist>);
void toggle (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);

View File

@ -490,19 +490,25 @@ TempoDialog::tap_tempo_focus_out (GdkEventFocus* )
MeterDialog::MeterDialog (TempoMap& map, samplepos_t sample, const string&)
: ArdourDialog (_("New Meter"))
{
#warning NUTEMPO needs new map API
#if 0
sample = map.round_to_bar(sample, RoundNearest).sample;
Temporal::BBT_Time when (map.bbt_at_sample (sample));
Meter meter (map.meter_at_sample (sample));
init (when, meter.divisions_per_bar(), meter.note_divisor(), false, MusicTime);
#endif
}
MeterDialog::MeterDialog (TempoMap& map, MeterSection& section, const string&)
: ArdourDialog (_("Edit Meter"))
{
#warning NUTEMPO needs new map API
#if 0
Temporal::BBT_Time when (map.bbt_at_sample (section.sample()));
init (when, section.divisions_per_bar(), section.note_divisor(), section.initial(), section.position_lock_style());
#endif
}
void

View File

@ -182,14 +182,14 @@ TimeAxisViewItem::init (ArdourCanvas::Item* parent, double fpp, uint32_t base_co
wide_enough_for_name = wide;
high_enough_for_name = high;
if (duration == 0) {
if (duration.zero ()) {
warning << "Time Axis Item Duration == 0" << endl;
}
if (visibility & ShowFrame) {
frame = new ArdourCanvas::Rectangle (group,
ArdourCanvas::Rect (0.0, 0.0,
trackview.editor().sample_to_pixel(duration),
trackview.editor().duration_to_pixels (duration),
trackview.current_height()));
frame->set_outline_what (ArdourCanvas::Rectangle::What (ArdourCanvas::Rectangle::LEFT|ArdourCanvas::Rectangle::RIGHT));
@ -287,7 +287,7 @@ TimeAxisViewItem::set_position(timepos_t const & pos, void* src, double* delta)
return false;
}
position = pos;
time_position = pos;
double new_unit_pos = trackview.editor().time_to_pixel (time_position);
@ -327,14 +327,16 @@ bool
TimeAxisViewItem::set_duration (timecnt_t const & dur, void* src)
{
if ((dur > max_item_duration) || (dur < min_item_duration)) {
warning << string_compose (
P_("new duration %1 frame is out of bounds for %2", "new duration of %1 samples is out of bounds for %2", dur),
get_item_name(), dur)
<< endmsg;
// XXX NUTEMPO we do not have a plural i18n form that is type-safe (P_() requires integers)
//
//warning << string_compose (
//P_("new duration %1 is out of bounds for %2", "new duration of %1 samples is out of bounds for %2", dur),
// get_item_name(), dur)
//<< endmsg;
return false;
}
if (dur == 0) {
if (dur.zero()) {
group->hide();
}
@ -363,7 +365,7 @@ TimeAxisViewItem::get_duration() const
* @param src the identity of the object that initiated the change
*/
void
TimeAxisViewItem::set_max_duration(samplecnt_t dur, void* src)
TimeAxisViewItem::set_max_duration(timecnt_t const & dur, void* src)
{
max_item_duration = dur;
MaxDurationChanged(max_item_duration, src); /* EMIT_SIGNAL */
@ -383,7 +385,7 @@ TimeAxisViewItem::get_max_duration() const
* @param src the identity of the object that initiated the change
*/
void
TimeAxisViewItem::set_min_duration(samplecnt_t dur, void* src)
TimeAxisViewItem::set_min_duration(timecnt_t const & dur, void* src)
{
min_item_duration = dur;
MinDurationChanged(max_item_duration, src); /* EMIT_SIGNAL */
@ -804,7 +806,7 @@ TimeAxisViewItem::set_samples_per_pixel (double fpp)
samples_per_pixel = fpp;
set_position (this->get_position(), this);
double end_pixel = trackview.editor().time_to_pixel (timeposition + get_duration());
double end_pixel = trackview.editor().time_to_pixel (time_position + get_duration());
double first_pixel = trackview.editor().time_to_pixel (time_position);
reset_width_dependent_items (end_pixel - first_pixel);

View File

@ -39,7 +39,7 @@ TimeSelection::operator[] (uint32_t which)
}
fatal << string_compose (_("programming error: request for non-existent audio range (%1)!"), which) << endmsg;
abort(); /*NOTREACHED*/
return *(new ARDOUR::TimelineRange(0,0,0)); /* keep the compiler happy; never called */
return *(new ARDOUR::TimelineRange(timepos_t(),timepos_t(), 0)); /* keep the compiler happy; never called */
}
bool
@ -71,13 +71,13 @@ TimeSelection::consolidate ()
samplepos_t
TimeSelection::start_sample () const
{
return start_time().sample ();
return start_time().samples ();
}
samplepos_t
TimeSelection::end_sample () const
{
return end_time().sample ();
return end_time().samples ();
}
samplecnt_t
@ -90,7 +90,7 @@ timepos_t
TimeSelection::start_time () const
{
if (empty()) {
return 0;
return timepos_t();
}
timepos_t first = std::numeric_limits<timepos_t>::max();
@ -106,7 +106,7 @@ TimeSelection::start_time () const
timepos_t
TimeSelection::end_time() const
{
timepos_t last = std::numeric_limits<timepos_t>::min();
timepos_t last;
for (std::list<TimelineRange>::const_iterator i = begin(); i != end(); ++i) {
if ((*i).end() > last) {

View File

@ -40,6 +40,8 @@ public:
Temporal::timepos_t end_time() const;
Temporal::timecnt_t length() const;
void set (Temporal::timepos_t const &, Temporal::timepos_t const &);
bool consolidate ();
};

View File

@ -668,7 +668,7 @@ TransportMastersWidget::Row::update (Session* s, samplepos_t now)
}
void
TransportMastersWidget::update (samplepos_t /* audible */)
TransportMastersWidget::update (timepos_t /* audible */)
{
samplepos_t now = AudioEngine::instance()->sample_time ();

View File

@ -50,7 +50,7 @@ class TransportMastersWidget : public Gtk::VBox, public ARDOUR::SessionHandlePtr
TransportMastersWidget ();
~TransportMastersWidget ();
void update (ARDOUR::samplepos_t);
void update (Temporal::timepos_t);
void set_transport_master (boost::shared_ptr<ARDOUR::TransportMaster>);
void set_session (ARDOUR::Session*);

View File

@ -100,7 +100,7 @@ gtk2_ardour_sources = [
'editor_regions.cc',
'editor_routes.cc',
'editor_rulers.cc',
# 'editor_selection.cc',
'editor_selection.cc',
'editor_snapshots.cc',
'editor_sources.cc',
'editor_summary.cc',