*/
, vertical_adjustment (0.0, 0.0, 10.0, 400.0)
- , horizontal_adjustment (0.0, 0.0, 20.0, 1200.0)
/* tool bar related */
session_range_marker_menu = 0;
range_marker_menu = 0;
marker_menu_item = 0;
- tm_marker_menu = 0;
+ tempo_or_meter_marker_menu = 0;
transport_marker_menu = 0;
new_transport_marker_menu = 0;
editor_mixer_strip_width = Wide;
entered_regionview = 0;
entered_marker = 0;
clear_entered_track = false;
- _new_regionviews_show_envelope = false;
current_timefx = 0;
playhead_cursor = 0;
button_release_can_deselect = true;
selection->MarkersChanged.connect (sigc::mem_fun(*this, &Editor::marker_selection_changed));
edit_controls_vbox.set_spacing (0);
- horizontal_adjustment.signal_value_changed().connect (sigc::mem_fun(*this, &Editor::scroll_canvas_horizontally), false);
vertical_adjustment.signal_value_changed().connect (sigc::mem_fun(*this, &Editor::tie_vertical_scrolling), true);
track_canvas->signal_map_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_map_handler));
nlabel = manage (new Label (_("Regions")));
nlabel->set_angle (-90);
the_notebook.append_page (_regions->widget (), *nlabel);
- nlabel = manage (new Label (_("Tracks/Busses")));
+ nlabel = manage (new Label (_("Tracks & Busses")));
nlabel->set_angle (-90);
the_notebook.append_page (_routes->widget (), *nlabel);
nlabel = manage (new Label (_("Snapshots")));
reset_x_origin (frame);
}
-void
-Editor::handle_new_duration ()
-{
- if (!_session) {
- return;
- }
-
- ENSURE_GUI_THREAD (*this, &Editor::handle_new_duration)
- nframes64_t new_end = _session->current_end_frame() + (nframes64_t) floorf (current_page_frames() * 0.10f);
-
- horizontal_adjustment.set_upper (new_end / frames_per_unit);
- horizontal_adjustment.set_page_size (current_page_frames()/frames_per_unit);
-
- if (horizontal_adjustment.get_value() + _canvas_width > horizontal_adjustment.get_upper()) {
- horizontal_adjustment.set_value (horizontal_adjustment.get_upper() - _canvas_width);
- }
- //cerr << "Editor::handle_new_duration () called ha v:l:u:ps:lcf = " << horizontal_adjustment.get_value() << ":" << horizontal_adjustment.get_lower() << ":" << horizontal_adjustment.get_upper() << ":" << horizontal_adjustment.get_page_size() << ":" << endl;//DEBUG
-}
void
Editor::update_title ()
_session->TransportStateChange.connect (_session_connections, invalidator (*this), boost::bind (&Editor::map_transport_state, this), gui_context());
_session->PositionChanged.connect (_session_connections, invalidator (*this), ui_bind (&Editor::map_position_change, this, _1), gui_context());
_session->RouteAdded.connect (_session_connections, invalidator (*this), ui_bind (&Editor::handle_new_route, this, _1), gui_context());
- _session->DurationChanged.connect (_session_connections, invalidator (*this), boost::bind (&Editor::handle_new_duration, this), gui_context());
_session->DirtyChanged.connect (_session_connections, invalidator (*this), boost::bind (&Editor::update_title, this), gui_context());
_session->TimecodeOffsetChanged.connect (_session_connections, invalidator (*this), boost::bind (&Editor::update_just_timecode, this), gui_context());
_session->tempo_map().PropertyChanged.connect (_session_connections, invalidator (*this), ui_bind (&Editor::tempo_map_changed, this, _1), gui_context());
_session->locations()->removed.connect (_session_connections, invalidator (*this), ui_bind (&Editor::location_gone, this, _1), gui_context());
_session->locations()->changed.connect (_session_connections, invalidator (*this), boost::bind (&Editor::refresh_location_display, this), gui_context());
_session->locations()->StateChanged.connect (_session_connections, invalidator (*this), ui_bind (&Editor::refresh_location_display_s, this, _1), gui_context());
- _session->locations()->session_range_location()->changed.connect (_session_connections, invalidator (*this), ui_bind (&Editor::session_range_location_changed, this, _1), gui_context());
_session->history().Changed.connect (_session_connections, invalidator (*this), boost::bind (&Editor::history_changed, this), gui_context());
if (Profile->get_sae()) {
_session->config.map_parameters (pc);
refresh_location_display ();
- handle_new_duration ();
restore_ruler_visibility ();
//tempo_map_changed (PropertyChange (0));
break;
case StreamItem:
- if (clicked_routeview->get_diskstream()) {
+ if (clicked_routeview->track()) {
build_menu_function = &Editor::build_track_context_menu;
} else {
build_menu_function = &Editor::build_track_bus_context_menu;
ActionManager::set_sensitive (ActionManager::edit_point_in_region_sensitive_actions, false);
}
}
- /*
if (region_edit_menu_split_multichannel_item) {
- if (clicked_regionview && clicked_regionview->region().n_channels() > 1) {
- // GTK2FIX find the action, change its sensitivity
- // region_edit_menu_split_multichannel_item->set_sensitive (true);
+ if (clicked_regionview && clicked_regionview->region()->n_channels() > 1) {
+ region_edit_menu_split_multichannel_item->set_sensitive (true);
} else {
- // GTK2FIX see above
- // region_edit_menu_split_multichannel_item->set_sensitive (false);
+ region_edit_menu_split_multichannel_item->set_sensitive (false);
}
- }*/
+ }
}
break;
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (clicked_axisview);
if (rtv) {
- boost::shared_ptr<Diskstream> ds;
+ boost::shared_ptr<Track> tr;
boost::shared_ptr<Playlist> pl;
- if ((ds = rtv->get_diskstream()) && ((pl = ds->playlist()))) {
- Playlist::RegionList* regions = pl->regions_at ((nframes64_t) floor ( (double)frame * ds->speed()));
+ if ((tr = rtv->track()) && ((pl = tr->playlist()))) {
+ Playlist::RegionList* regions = pl->regions_at ((nframes64_t) floor ( (double)frame * tr->speed()));
if (selection->regions.size() > 1) {
// there's already a multiple selection: just add a
boost::shared_ptr<Region> dummy_region; // = NULL
add_region_context_items (rtv->view(), dummy_region, edit_items);
} else {
- for (Playlist::RegionList::iterator i = regions->begin(); i != regions->end(); ++i) {
+ for (Playlist::RegionList::reverse_iterator i = regions->rbegin(); i != regions->rend(); ++i) {
add_region_context_items (rtv->view(), (*i), edit_items);
}
}
AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*> (clicked_axisview);
if (atv) {
- boost::shared_ptr<Diskstream> ds;
+ boost::shared_ptr<Track> tr;
boost::shared_ptr<Playlist> pl;
boost::shared_ptr<AudioPlaylist> apl;
- if ((ds = atv->get_diskstream()) && ((pl = ds->playlist()) != 0) && ((apl = boost::dynamic_pointer_cast<AudioPlaylist> (pl)) != 0)) {
+ if ((tr = atv->track()) && ((pl = tr->playlist()) != 0) && ((apl = boost::dynamic_pointer_cast<AudioPlaylist> (pl)) != 0)) {
Playlist::RegionList* regions = pl->regions_at (frame);
AudioPlaylist::Crossfades xfades;
boost::shared_ptr<Region> dummy_region; // = NULL
add_region_context_items (atv->audio_view(), dummy_region, edit_items);
} else {
- for (Playlist::RegionList::iterator i = regions->begin(); i != regions->end(); ++i) {
+ for (Playlist::RegionList::reverse_iterator i = regions->rbegin(); i != regions->rend(); ++i) {
add_region_context_items (atv->audio_view(), (*i), edit_items);
}
}
items.push_back (SeparatorElem());
items.push_back (MenuElem (_("Audition"), sigc::mem_fun(*this, &Editor::play_selected_region)));
- items.push_back (MenuElem (_("Export"), sigc::mem_fun(*this, &Editor::export_region)));
+ items.push_back (MenuElem (_("Export..."), sigc::mem_fun(*this, &Editor::export_region)));
items.push_back (MenuElem (_("Bounce"), sigc::mem_fun(*this, &Editor::bounce_region_selection)));
if (ar) {
- items.push_back (MenuElem (_("Spectral Analysis"), sigc::mem_fun(*this, &Editor::analyze_region_selection)));
+ items.push_back (MenuElem (_("Spectral Analysis..."), sigc::mem_fun(*this, &Editor::analyze_region_selection)));
}
items.push_back (SeparatorElem());
break;
}
- bbt_glue_item->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &Editor::set_region_lock_style), Region::MusicTime));
+ bbt_glue_item->signal_activate().connect (sigc::mem_fun (*this, &Editor::toggle_region_lock_style));
items.push_back (CheckMenuElem (_("Mute")));
CheckMenuItem* region_mute_item = static_cast<CheckMenuItem*>(&items.back());
fooc.block (false);
}
- items.push_back (MenuElem (_("Transpose"), mem_fun(*this, &Editor::pitch_shift_regions)));
+ items.push_back (MenuElem (_("Transpose..."), mem_fun(*this, &Editor::pitch_shift_regions)));
if (!Profile->get_sae()) {
items.push_back (CheckMenuElem (_("Opaque")));
items.push_back (SeparatorElem());
}
- items.push_back (MenuElem (_("Normalize"), sigc::mem_fun(*this, &Editor::normalize_region)));
+ items.push_back (MenuElem (_("Normalize..."), sigc::mem_fun(*this, &Editor::normalize_region)));
if (ar->scale_amplitude() != 1) {
items.push_back (MenuElem (_("Reset Gain"), sigc::mem_fun(*this, &Editor::reset_region_scale_amplitude)));
}
region_edit_menu_split_multichannel_item = &items.back();
items.push_back (MenuElem (_("Duplicate"), (sigc::bind (sigc::mem_fun(*this, &Editor::duplicate_dialog), false))));
- items.push_back (MenuElem (_("Multi-Duplicate"), (sigc::bind (sigc::mem_fun(*this, &Editor::duplicate_dialog), true))));
+ items.push_back (MenuElem (_("Multi-Duplicate..."), (sigc::bind (sigc::mem_fun(*this, &Editor::duplicate_dialog), true))));
items.push_back (MenuElem (_("Fill Track"), (sigc::mem_fun(*this, &Editor::region_fill_track))));
items.push_back (SeparatorElem());
items.push_back (MenuElem (_("Remove"), sigc::mem_fun(*this, &Editor::remove_selected_regions)));
if (with_dialog) {
ArdourDialog win (_("Duplicate"));
- Label label (_("Number of Duplications:"));
+ Label label (_("Number of duplications:"));
Adjustment adjustment (1.0, 1.0, 1000000.0, 1.0, 5.0);
SpinButton spinner (adjustment, 0.0, 1);
HBox hbox;
return ret;
}
-void
-Editor::session_range_location_changed (Location* location)
-{
- ENSURE_GUI_THREAD (*this, &Editor::session_range_location_changed, location)
- //reset_scrolling_region ();
- nframes64_t const session_span = location->end() + (nframes64_t) floorf (current_page_frames() * 0.10f);
- horizontal_adjustment.set_upper (session_span / frames_per_unit);
-}
-
int
Editor::playlist_deletion_dialog (boost::shared_ptr<Playlist> pl)
{
- ArdourDialog dialog ("playlist deletion dialog");
+ ArdourDialog dialog (_("Playlist Deletion"));
Label label (string_compose (_("Playlist %1 is currently unused.\n"
"If left alone, no audio files used by it will be cleaned.\n"
"If deleted, audio files used by it alone by will cleaned."),
void
Editor::reposition_and_zoom (nframes64_t frame, double fpu)
{
- //cerr << "Editor::reposition_and_zoom () called ha v:l:u:ps:fpu = " << horizontal_adjustment.get_value() << ":" << horizontal_adjustment.get_lower() << ":" << horizontal_adjustment.get_upper() << ":" << horizontal_adjustment.get_page_size() << ":" << frames_per_unit << endl;//DEBUG
reset_x_origin (frame);
reset_zoom (fpu);
void
Editor::post_zoom ()
{
- nframes64_t cef = 0;
-
// convert fpu to frame count
nframes64_t frames = (nframes64_t) floor (frames_per_unit * _canvas_width);
}
}
- leftmost_frame = (nframes64_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
+ leftmost_frame = (nframes64_t) floor (_horizontal_position * frames_per_unit);
ZoomChanged (); /* EMIT_SIGNAL */
- if (_session) {
- cef = _session->current_end_frame() + (current_page_frames() / 10);// Add a little extra so we can see the end marker
- }
- horizontal_adjustment.set_upper (cef / frames_per_unit);
-
//reset_scrolling_region ();
if (playhead_cursor) {
Editor::queue_visual_change (nframes64_t where)
{
pending_visual_change.add (VisualChange::TimeOrigin);
-
- /* if we're moving beyond the end, make sure the upper limit of the horizontal adjustment
- can reach.
- */
-
- if (_session && (where > _session->current_end_frame())) {
- horizontal_adjustment.set_upper ((where + current_page_frames()) / frames_per_unit);
- }
-
pending_visual_change.time_origin = where;
-
ensure_visual_change_idle_handler ();
}
VisualChange::Type p = pending_visual_change.pending;
pending_visual_change.pending = (VisualChange::Type) 0;
- double last_time_origin = horizontal_adjustment.get_value();
+ double last_time_origin = _horizontal_position;
if (p & VisualChange::ZoomLevel) {
set_frames_per_unit (pending_visual_change.frames_per_unit);
update_tempo_based_rulers ();
}
if (p & VisualChange::TimeOrigin) {
- horizontal_adjustment.set_value (pending_visual_change.time_origin / frames_per_unit);
+ set_horizontal_position (pending_visual_change.time_origin / frames_per_unit);
}
if (p & VisualChange::YOrigin) {
vertical_adjustment.set_value (pending_visual_change.y_origin);
}
- if (last_time_origin == horizontal_adjustment.get_value()) {
+ if (last_time_origin == _horizontal_position) {
/* changed signal not emitted */
update_fixed_rulers ();
redisplay_tempo (true);
_summary->set_overlays_dirty ();
- // cerr << "Editor::idle_visual_changer () called ha v:l:u:ps:fpu = " << horizontal_adjustment.get_value() << ":" << horizontal_adjustment.get_lower() << ":" << horizontal_adjustment.get_upper() << ":" << horizontal_adjustment.get_page_size() << ":" << frames_per_unit << endl;//DEBUG
pending_visual_change.idle_handler_id = -1;
return 0; /* this is always a one-shot call */
}
for (TrackViewList::const_iterator t = tracks->begin(); t != tracks->end(); ++t) {
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(*t);
if (rtv) {
- boost::shared_ptr<Diskstream> ds;
+ boost::shared_ptr<Track> tr;
boost::shared_ptr<Playlist> pl;
- if ((ds = rtv->get_diskstream()) && ((pl = ds->playlist()))) {
+ if ((tr = rtv->track()) && ((pl = tr->playlist()))) {
Playlist::RegionList* regions = pl->regions_at (
- (nframes64_t) floor ( (double)where * ds->speed()));
+ (nframes64_t) floor ( (double)where * tr->speed()));
for (Playlist::RegionList::iterator i = regions->begin(); i != regions->end(); ++i) {
RegionView* rv = rtv->view()->find_view (*i);
for (TrackViewList::const_iterator t = tracks->begin(); t != tracks->end(); ++t) {
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(*t);
if (rtv) {
- boost::shared_ptr<Diskstream> ds;
+ boost::shared_ptr<Track> tr;
boost::shared_ptr<Playlist> pl;
- if ((ds = rtv->get_diskstream()) && ((pl = ds->playlist()))) {
+ if ((tr = rtv->track()) && ((pl = tr->playlist()))) {
Playlist::RegionList* regions = pl->regions_touched (
- (nframes64_t) floor ( (double)where * ds->speed()), max_frames);
+ (nframes64_t) floor ( (double)where * tr->speed()), max_frames);
for (Playlist::RegionList::iterator i = regions->begin(); i != regions->end(); ++i) {
boost::shared_ptr<Playlist> pl;
vector<boost::shared_ptr<Region> > results;
RegionView* marv;
- boost::shared_ptr<Diskstream> ds;
+ boost::shared_ptr<Track> tr;
- if ((ds = tatv->get_diskstream()) == 0) {
+ if ((tr = tatv->track()) == 0) {
/* bus */
continue;
}
- if ((pl = (ds->playlist())) != 0) {
+ if ((pl = (tr->playlist())) != 0) {
pl->get_region_list_equivalent_regions (region, results);
}
* 1. we don't update things when there's a pending locate request, otherwise
* when the editor requests a locate there is a chance that this method
* will move the playhead before the locate request is processed, causing
+ * a visual glitch.
* 2. if we're not rolling, there's nothing to do here (locates are handled elsewhere).
* 3. if we're still at the same frame that we were last time, there's nothing to do.
*/
}
current = target;
- horizontal_adjustment.set_value (current);
+ set_horizontal_position (current);
#endif
}