- control_point->line().remove_point (*control_point);
-}
-
-void
-Editor::edit_control_point (ArdourCanvas::Item* item)
-{
- ControlPoint* p = reinterpret_cast<ControlPoint *> (item->get_data ("control_point"));
-
- if (p == 0) {
- fatal << _("programming error: control point canvas item has no control point object pointer!") << endmsg;
- /*NOTREACHED*/
- }
-
- ControlPointDialog d (p);
- d.set_position (Gtk::WIN_POS_MOUSE);
- ensure_float (d);
-
- if (d.run () != RESPONSE_ACCEPT) {
- return;
- }
-
- p->line().modify_point_y (*p, d.get_y_fraction ());
-}
-
-
-void
-Editor::visible_order_range (int* low, int* high) const
-{
- *low = TimeAxisView::max_order ();
- *high = 0;
-
- for (TrackViewList::const_iterator i = track_views.begin(); i != track_views.end(); ++i) {
-
- RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
-
- if (!rtv->hidden()) {
-
- if (*high < rtv->order()) {
- *high = rtv->order ();
- }
-
- if (*low > rtv->order()) {
- *low = rtv->order ();
- }
- }
- }
-}
-
-void
-Editor::region_view_item_click (AudioRegionView& rv, GdkEventButton* event)
-{
- /* Either add to or set the set the region selection, unless
- this is an alignment click (control used)
- */
-
- if (Keyboard::modifier_state_contains (event->state, Keyboard::PrimaryModifier)) {
- TimeAxisView* tv = &rv.get_time_axis_view();
- RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(tv);
- double speed = 1.0;
- if (rtv && rtv->is_track()) {
- speed = rtv->get_diskstream()->speed();
- }
-
- nframes64_t where = get_preferred_edit_position();
-
- if (where >= 0) {
-
- if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
-
- align_region (rv.region(), SyncPoint, (nframes64_t) (where * speed));
-
- } else if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
-
- align_region (rv.region(), End, (nframes64_t) (where * speed));
-
- } else {
-
- align_region (rv.region(), Start, (nframes64_t) (where * speed));
- }
- }
- }
-}
-
-void
-Editor::show_verbose_time_cursor (nframes64_t frame, double offset, double xpos, double ypos)
-{
- char buf[128];
- SMPTE::Time smpte;
- BBT_Time bbt;
- int hours, mins;
- nframes64_t frame_rate;
- float secs;
-
- if (session == 0) {
- return;
- }
-
- AudioClock::Mode m;
-
- if (Profile->get_sae() || Profile->get_small_screen()) {
- m = ARDOUR_UI::instance()->primary_clock.mode();
- } else {
- m = ARDOUR_UI::instance()->secondary_clock.mode();
- }
-
- switch (m) {
- case AudioClock::BBT:
- session->bbt_time (frame, bbt);
- snprintf (buf, sizeof (buf), "%02" PRIu32 "|%02" PRIu32 "|%02" PRIu32, bbt.bars, bbt.beats, bbt.ticks);
- break;
-
- case AudioClock::SMPTE:
- session->smpte_time (frame, smpte);
- snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%02" PRId32 ":%02" PRId32, smpte.hours, smpte.minutes, smpte.seconds, smpte.frames);
- break;
-
- case AudioClock::MinSec:
- /* XXX this is copied from show_verbose_duration_cursor() */
- frame_rate = session->frame_rate();
- hours = frame / (frame_rate * 3600);
- frame = frame % (frame_rate * 3600);
- mins = frame / (frame_rate * 60);
- frame = frame % (frame_rate * 60);
- secs = (float) frame / (float) frame_rate;
- snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%.4f", hours, mins, secs);
- break;
-
- default:
- snprintf (buf, sizeof(buf), "%" PRIi64, frame);
- break;
- }
-
- if (xpos >= 0 && ypos >=0) {
- set_verbose_canvas_cursor (buf, xpos + offset, ypos + offset);
- }
- else {
- set_verbose_canvas_cursor (buf, _drag->current_pointer_x() + offset - horizontal_adjustment.get_value(), _drag->current_pointer_y() + offset - vertical_adjustment.get_value() + canvas_timebars_vsize);
- }
- show_verbose_canvas_cursor ();
-}
-
-void
-Editor::show_verbose_duration_cursor (nframes64_t start, nframes64_t end, double offset, double xpos, double ypos)
-{
- char buf[128];
- SMPTE::Time smpte;
- BBT_Time sbbt;
- BBT_Time ebbt;
- int hours, mins;
- nframes64_t distance, frame_rate;
- float secs;
- Meter meter_at_start(session->tempo_map().meter_at(start));
-
- if (session == 0) {
- return;
- }
-
- AudioClock::Mode m;
-
- if (Profile->get_sae() || Profile->get_small_screen()) {
- m = ARDOUR_UI::instance()->primary_clock.mode ();
- } else {
- m = ARDOUR_UI::instance()->secondary_clock.mode ();
- }
-
- switch (m) {
- case AudioClock::BBT:
- session->bbt_time (start, sbbt);
- session->bbt_time (end, ebbt);
-
- /* subtract */
- /* XXX this computation won't work well if the
- user makes a selection that spans any meter changes.
- */
-
- ebbt.bars -= sbbt.bars;
- if (ebbt.beats >= sbbt.beats) {
- ebbt.beats -= sbbt.beats;
- } else {
- ebbt.bars--;
- ebbt.beats = int(meter_at_start.beats_per_bar()) + ebbt.beats - sbbt.beats;
- }
- if (ebbt.ticks >= sbbt.ticks) {
- ebbt.ticks -= sbbt.ticks;
- } else {
- ebbt.beats--;
- ebbt.ticks = int(Meter::ticks_per_beat) + ebbt.ticks - sbbt.ticks;
- }
-
- snprintf (buf, sizeof (buf), "%02" PRIu32 "|%02" PRIu32 "|%02" PRIu32, ebbt.bars, ebbt.beats, ebbt.ticks);
- break;
-
- case AudioClock::SMPTE:
- session->smpte_duration (end - start, smpte);
- snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%02" PRId32 ":%02" PRId32, smpte.hours, smpte.minutes, smpte.seconds, smpte.frames);
- break;
-
- case AudioClock::MinSec:
- /* XXX this stuff should be elsewhere.. */
- distance = end - start;
- frame_rate = session->frame_rate();
- hours = distance / (frame_rate * 3600);
- distance = distance % (frame_rate * 3600);
- mins = distance / (frame_rate * 60);
- distance = distance % (frame_rate * 60);
- secs = (float) distance / (float) frame_rate;
- snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%.4f", hours, mins, secs);
- break;
-
- default:
- snprintf (buf, sizeof(buf), "%" PRIi64, end - start);
- break;
- }
-
- if (xpos >= 0 && ypos >=0) {
- set_verbose_canvas_cursor (buf, xpos + offset, ypos + offset);
- }
- else {
- set_verbose_canvas_cursor (buf, _drag->current_pointer_x() + offset, _drag->current_pointer_y() + offset);
- }
-
- show_verbose_canvas_cursor ();
-}
-
-void
-Editor::collect_new_region_view (RegionView* rv)
-{
- latest_regionviews.push_back (rv);
-}
-
-void
-Editor::collect_and_select_new_region_view (RegionView* rv)
-{
- selection->add(rv);
- latest_regionviews.push_back (rv);
-}
-
-void
-Editor::cancel_selection ()
-{
- for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
- (*i)->hide_selection ();
- }
-
- selection->clear ();
- clicked_selection = 0;
-}