#include "ardour/operations.h"
#include "ardour_ui.h"
+#include "debug.h"
#include "editor.h"
#include "time_axis_view.h"
#include "route_time_axis.h"
_session->request_locate (pos);
}
-void
-Editor::playhead_backward ()
-{
- framepos_t pos;
- framepos_t cnt;
- float prefix;
- bool was_floating;
-
- if (get_prefix (prefix, was_floating)) {
- cnt = 1;
- } else {
- if (was_floating) {
- cnt = (framepos_t) floor (prefix * _session->frame_rate ());
- } else {
- cnt = (framepos_t) prefix;
- }
- }
-
- pos = playhead_cursor->current_frame;
-
- if ((framepos_t) pos < cnt) {
- pos = 0;
- } else {
- pos -= cnt;
- }
-
- /* XXX this is completely insane. with the current buffering
- design, we'll force a complete track buffer flush and
- reload, just to move 1 sample !!!
- */
-
- _session->request_locate (pos);
-}
-
-void
-Editor::playhead_forward ()
-{
- framepos_t pos;
- framepos_t cnt;
- bool was_floating;
- float prefix;
-
- if (get_prefix (prefix, was_floating)) {
- cnt = 1;
- } else {
- if (was_floating) {
- cnt = (framepos_t) floor (prefix * _session->frame_rate ());
- } else {
- cnt = (framepos_t) floor (prefix);
- }
- }
-
- pos = playhead_cursor->current_frame;
-
- /* XXX this is completely insane. with the current buffering
- design, we'll force a complete track buffer flush and
- reload, just to move 1 sample !!!
- */
-
- _session->request_locate (pos+cnt);
-}
-
void
Editor::cursor_align (bool playhead_to_edit)
{
}
}
-void
-Editor::edit_cursor_backward ()
-{
- framepos_t pos;
- framepos_t cnt;
- float prefix;
- bool was_floating;
-
- if (get_prefix (prefix, was_floating)) {
- cnt = 1;
- } else {
- if (was_floating) {
- cnt = (framepos_t) floor (prefix * _session->frame_rate ());
- } else {
- cnt = (framepos_t) prefix;
- }
- }
-
- if ((pos = get_preferred_edit_position()) < 0) {
- return;
- }
-
- if (pos < cnt) {
- pos = 0;
- } else {
- pos -= cnt;
- }
-
- // EDIT CURSOR edit_cursor->set_position (pos);
-}
-
-void
-Editor::edit_cursor_forward ()
-{
- //framepos_t pos;
- framepos_t cnt;
- bool was_floating;
- float prefix;
-
- if (get_prefix (prefix, was_floating)) {
- cnt = 1;
- } else {
- if (was_floating) {
- cnt = (framepos_t) floor (prefix * _session->frame_rate ());
- } else {
- cnt = (framepos_t) floor (prefix);
- }
- }
-
- // pos = edit_cursor->current_frame;
- // EDIT CURSOR edit_cursor->set_position (pos+cnt);
-}
-
-void
-Editor::goto_frame ()
-{
- float prefix;
- bool was_floating;
- framepos_t frame;
-
- if (get_prefix (prefix, was_floating)) {
- return;
- }
-
- if (was_floating) {
- frame = (framepos_t) floor (prefix * _session->frame_rate());
- } else {
- frame = (framepos_t) floor (prefix);
- }
-
- _session->request_locate (frame);
-}
-
void
Editor::scroll_backward (float pages)
{
- framepos_t frame;
- framepos_t one_page = (framepos_t) rint (_canvas_width * frames_per_unit);
- bool was_floating;
- float prefix;
- framepos_t cnt;
-
- if (get_prefix (prefix, was_floating)) {
- cnt = (framepos_t) floor (pages * one_page);
- } else {
- if (was_floating) {
- cnt = (framepos_t) floor (prefix * _session->frame_rate());
- } else {
- cnt = (framepos_t) floor (prefix * one_page);
- }
- }
+ framepos_t const one_page = (framepos_t) rint (_canvas_width * frames_per_unit);
+ framepos_t const cnt = (framepos_t) floor (pages * one_page);
+ framepos_t frame;
if (leftmost_frame < cnt) {
frame = 0;
} else {
void
Editor::scroll_forward (float pages)
{
- framepos_t frame;
- framepos_t one_page = (framepos_t) rint (_canvas_width * frames_per_unit);
- bool was_floating;
- float prefix;
- framepos_t cnt;
-
- if (get_prefix (prefix, was_floating)) {
- cnt = (framepos_t) floor (pages * one_page);
- } else {
- if (was_floating) {
- cnt = (framepos_t) floor (prefix * _session->frame_rate());
- } else {
- cnt = (framepos_t) floor (prefix * one_page);
- }
- }
+ framepos_t const one_page = (framepos_t) rint (_canvas_width * frames_per_unit);
+ framepos_t const cnt = (framepos_t) floor (pages * one_page);
+ framepos_t frame;
if (max_framepos - cnt < leftmost_frame) {
frame = max_framepos - cnt;
} else {
void
Editor::scroll_tracks_down ()
{
- float prefix;
- bool was_floating;
- int cnt;
-
- if (get_prefix (prefix, was_floating)) {
- cnt = 1;
- } else {
- cnt = (int) floor (prefix);
- }
-
- double vert_value = vertical_adjustment.get_value() + (cnt *
- vertical_adjustment.get_page_size());
+ double vert_value = vertical_adjustment.get_value() + vertical_adjustment.get_page_size();
if (vert_value > vertical_adjustment.get_upper() - _canvas_height) {
vert_value = vertical_adjustment.get_upper() - _canvas_height;
}
+
vertical_adjustment.set_value (vert_value);
}
void
Editor::scroll_tracks_up ()
{
- float prefix;
- bool was_floating;
- int cnt;
-
- if (get_prefix (prefix, was_floating)) {
- cnt = 1;
- } else {
- cnt = (int) floor (prefix);
- }
-
- vertical_adjustment.set_value (vertical_adjustment.get_value() - (cnt * vertical_adjustment.get_page_size()));
+ vertical_adjustment.set_value (vertical_adjustment.get_value() - vertical_adjustment.get_page_size());
}
void
if (new_leftmost > frame) {
new_leftmost = 0;
}
-// begin_reversible_command (_("zoom to frame"));
-// _session->add_undo (sigc::bind (sigc::mem_fun(*this, &Editor::reposition_and_zoom), leftmost_frame, frames_per_unit));
-// _session->add_redo (sigc::bind (sigc::mem_fun(*this, &Editor::reposition_and_zoom), new_leftmost, new_fpu));
-// commit_reversible_command ();
+
+ if (new_leftmost < 0) {
+ new_leftmost = 0;
+ }
reposition_and_zoom (new_leftmost, new_fpu);
}
_session->commit_reversible_command ();
}
-void
-Editor::amplitude_zoom_step (bool in)
-{
- gdouble zoom = 1.0;
-
- if (in) {
- zoom *= 2.0;
- } else {
- if (zoom > 2.0) {
- zoom /= 2.0;
- } else {
- zoom = 1.0;
- }
- }
-
-#ifdef FIX_FOR_CANVAS
- /* XXX DO SOMETHING */
-#endif
-}
-
-
-/* DELETION */
-
-
-void
-Editor::delete_sample_forward ()
-{
-}
-
-void
-Editor::delete_sample_backward ()
-{
-}
-
-void
-Editor::delete_screen ()
-{
-}
-
-/* SEARCH */
-
-void
-Editor::search_backwards ()
-{
- /* what ? */
-}
-
-void
-Editor::search_forwards ()
-{
- /* what ? */
-}
-
/* MARKS */
void
void
Editor::set_mark ()
{
- framepos_t pos;
- float prefix;
- bool was_floating;
- string markername;
+ framepos_t const pos = _session->audible_frame ();
- if (get_prefix (prefix, was_floating)) {
- pos = _session->audible_frame ();
- } else {
- if (was_floating) {
- pos = (framepos_t) floor (prefix * _session->frame_rate ());
- } else {
- pos = (framepos_t) floor (prefix);
- }
- }
-
- _session->locations()->next_available_name(markername,"mark");
- if (!choose_new_marker_name(markername)) {
+ string markername;
+ _session->locations()->next_available_name (markername, "mark");
+
+ if (!choose_new_marker_name (markername)) {
return;
}
+
_session->locations()->add (new Location (*_session, pos, 0, markername, Location::IsMark), true);
}
void
Editor::paste (float times)
{
+ DEBUG_TRACE (DEBUG::CutNPaste, "paste to preferred edit pos\n");
paste_internal (get_preferred_edit_position(), times);
}
void
Editor::paste_internal (framepos_t position, float times)
{
- bool commit = false;
+ DEBUG_TRACE (DEBUG::CutNPaste, string_compose ("apparent paste position is %1\n", position));
if (internal_editing()) {
if (cut_buffer->midi_notes.empty()) {
if (position == max_framepos) {
position = get_preferred_edit_position();
+ DEBUG_TRACE (DEBUG::CutNPaste, string_compose ("preferred edit position is %1\n", position));
}
- begin_reversible_command (Operations::paste);
-
TrackViewList ts;
TrackViewList::iterator i;
size_t nth;
ts.push_back (_last_cut_copy_source_track);
}
- for (nth = 0, i = ts.begin(); i != ts.end(); ++i, ++nth) {
+ if (internal_editing ()) {
/* undo/redo is handled by individual tracks/regions */
-
- if (internal_editing()) {
-
+
+ for (nth = 0, i = ts.begin(); i != ts.end(); ++i, ++nth) {
+
RegionSelection rs;
RegionSelection::iterator r;
MidiNoteSelection::iterator cb;
-
+
get_regions_at (rs, position, ts);
-
+
for (cb = cut_buffer->midi_notes.begin(), r = rs.begin();
cb != cut_buffer->midi_notes.end() && r != rs.end(); ++r) {
MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (*r);
++cb;
}
}
+ }
+
+ } else {
- } else {
+ /* we do redo (do you do voodoo?) */
- if ((*i)->paste (position, times, *cut_buffer, nth)) {
- commit = true;
- }
+ begin_reversible_command (Operations::paste);
+
+ for (nth = 0, i = ts.begin(); i != ts.end(); ++i, ++nth) {
+ (*i)->paste (position, times, *cut_buffer, nth);
}
- }
-
- if (commit) {
+
commit_reversible_command ();
}
}
/* more to come */
}
-void
-Editor::brush (framepos_t pos)
-{
- snap_to (pos);
-
- RegionSelection rs = get_regions_from_selection_and_entered ();
-
- if (rs.empty()) {
- return;
- }
-
- for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
- mouse_brush_insert_region ((*i), pos);
- }
-}
-
void
Editor::reset_region_gain_envelopes ()
{
void
Editor::fit_selected_tracks ()
{
- fit_tracks (selection->tracks);
+ if (!selection->tracks.empty()) {
+ fit_tracks (selection->tracks);
+ } else {
+ TrackViewList tvl;
+
+ /* no selected tracks - use tracks with selected regions */
+
+ if (!selection->regions.empty()) {
+ for (RegionSelection::iterator r = selection->regions.begin(); r != selection->regions.end(); ++r) {
+ tvl.push_back (&(*r)->get_time_axis_view ());
+ }
+
+ if (!tvl.empty()) {
+ fit_tracks (tvl);
+ }
+ } else if (internal_editing()) {
+ /* no selected tracks, or regions, but in internal edit mode, so follow the mouse and use
+ the entered track
+ */
+ if (entered_track) {
+ tvl.push_back (entered_track);
+ fit_tracks (tvl);
+ }
+ }
+ }
}
void