, minsec_label (_("Mins:Secs"))
, bbt_label (_("Bars:Beats"))
, timecode_label (_("Timecode"))
- , frame_label (_("Frames"))
+ , samples_label (_("Samples"))
, tempo_label (_("Tempo"))
, meter_label (_("Meter"))
, mark_label (_("Location Markers"))
timecode_label.set_padding (5,0);
timecode_label.hide ();
timecode_label.set_no_show_all();
- frame_label.set_name ("EditorTimeButton");
- frame_label.set_size_request (-1, (int)timebar_height);
- frame_label.set_alignment (1.0, 0.5);
- frame_label.set_padding (5,0);
- frame_label.hide ();
- frame_label.set_no_show_all();
+ samples_label.set_name ("EditorTimeButton");
+ samples_label.set_size_request (-1, (int)timebar_height);
+ samples_label.set_alignment (1.0, 0.5);
+ samples_label.set_padding (5,0);
+ samples_label.hide ();
+ samples_label.set_no_show_all();
tempo_label.set_name ("EditorTimeButton");
tempo_label.set_size_request (-1, (int)timebar_height);
tempo_label.set_padding (5,0);
tempo_label.hide();
tempo_label.set_no_show_all();
+
meter_label.set_name ("EditorTimeButton");
meter_label.set_size_request (-1, (int)timebar_height);
meter_label.set_alignment (1.0, 0.5);
meter_label.set_padding (5,0);
meter_label.hide();
meter_label.set_no_show_all();
+
mark_label.set_name ("EditorTimeButton");
mark_label.set_size_request (-1, (int)timebar_height);
mark_label.set_alignment (1.0, 0.5);
mark_label.set_padding (5,0);
mark_label.hide();
mark_label.set_no_show_all();
+
cd_mark_label.set_name ("EditorTimeButton");
cd_mark_label.set_size_request (-1, (int)timebar_height);
cd_mark_label.set_alignment (1.0, 0.5);
cd_mark_label.set_padding (5,0);
cd_mark_label.hide();
cd_mark_label.set_no_show_all();
+
range_mark_label.set_name ("EditorTimeButton");
range_mark_label.set_size_request (-1, (int)timebar_height);
range_mark_label.set_alignment (1.0, 0.5);
range_mark_label.set_padding (5,0);
range_mark_label.hide();
range_mark_label.set_no_show_all();
+
transport_mark_label.set_name ("EditorTimeButton");
transport_mark_label.set_size_request (-1, (int)timebar_height);
transport_mark_label.set_alignment (1.0, 0.5);
initialize_rulers ();
initialize_canvas ();
+
_summary = new EditorSummary (this);
selection->TimeChanged.connect (sigc::mem_fun(*this, &Editor::time_selection_changed));
selection->TracksChanged.connect (sigc::mem_fun(*this, &Editor::track_selection_changed));
+
editor_regions_selection_changed_connection = selection->RegionsChanged.connect (sigc::mem_fun(*this, &Editor::region_selection_changed));
+
selection->PointsChanged.connect (sigc::mem_fun(*this, &Editor::point_selection_changed));
selection->MarkersChanged.connect (sigc::mem_fun(*this, &Editor::marker_selection_changed));
controls_layout.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
controls_layout.signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::edit_controls_button_release));
- controls_layout_size_request_connection = controls_layout.signal_size_request().connect (sigc::mem_fun (*this, &Editor::controls_layout_size_request));
_cursors = new MouseCursors;
ArdourCanvas::Canvas* time_pad = manage(new ArdourCanvas::Canvas());
ArdourCanvas::SimpleLine* pad_line_1 = manage(new ArdourCanvas::SimpleLine(*time_pad->root(),
0.0, 1.0, 100.0, 1.0));
+
pad_line_1->property_color_rgba() = 0xFF0000FF;
pad_line_1->show();
+
time_pad->show();
time_canvas_vbox.set_size_request (-1, (int)(timebar_height * visible_timebars) + 2);
summary_arrows_left_left->add (*manage (new Arrow (ARROW_LEFT, SHADOW_NONE)));
summary_arrows_left_left->signal_pressed().connect (sigc::hide_return (sigc::mem_fun (*this, &Editor::horizontal_scroll_left_press)));
summary_arrows_left_left->signal_released().connect (sigc::mem_fun (*this, &Editor::horizontal_scroll_left_release));
+
Button* summary_arrows_left_right = manage (new Button);
summary_arrows_left_right->add (*manage (new Arrow (ARROW_RIGHT, SHADOW_NONE)));
summary_arrows_left_right->signal_pressed().connect (sigc::hide_return (sigc::mem_fun (*this, &Editor::horizontal_scroll_right_press)));
summary_arrows_left_right->signal_released().connect (sigc::mem_fun (*this, &Editor::horizontal_scroll_right_release));
+
VBox* summary_arrows_left = manage (new VBox);
summary_arrows_left->pack_start (*summary_arrows_left_left);
summary_arrows_left->pack_start (*summary_arrows_left_right);
summary_arrows_right_left->add (*manage (new Arrow (ARROW_LEFT, SHADOW_NONE)));
summary_arrows_right_left->signal_pressed().connect (sigc::hide_return (sigc::mem_fun (*this, &Editor::horizontal_scroll_left_press)));
summary_arrows_right_left->signal_released().connect (sigc::mem_fun (*this, &Editor::horizontal_scroll_left_release));
+
Button* summary_arrows_right_right = manage (new Button);
summary_arrows_right_right->add (*manage (new Arrow (ARROW_RIGHT, SHADOW_NONE)));
summary_arrows_right_right->signal_pressed().connect (sigc::hide_return (sigc::mem_fun (*this, &Editor::horizontal_scroll_right_press)));
summary_arrows_right_right->signal_released().connect (sigc::mem_fun (*this, &Editor::horizontal_scroll_right_release));
+
VBox* summary_arrows_right = manage (new VBox);
summary_arrows_right->pack_start (*summary_arrows_right_left);
summary_arrows_right->pack_start (*summary_arrows_right_right);
Frame* summary_frame = manage (new Frame);
summary_frame->set_shadow_type (Gtk::SHADOW_ETCHED_IN);
+
summary_frame->add (*_summary);
summary_frame->show ();
Location* loc = _session->locations()->auto_loop_location();
if (loc == 0) {
loc = new Location (*_session, 0, _session->current_end_frame(), _("Loop"),(Location::Flags) (Location::IsAutoLoop | Location::IsHidden));
+
if (loc->start() == loc->end()) {
loc->set_end (loc->start() + 1);
}
+
_session->locations()->add (loc, false);
_session->set_auto_loop_location (loc);
} else {
}
loc = _session->locations()->auto_punch_location();
+
if (loc == 0) {
loc = new Location (*_session, 0, _session->current_end_frame(), _("Punch"), (Location::Flags) (Location::IsAutoPunch | Location::IsHidden));
+
if (loc->start() == loc->end()) {
loc->set_end (loc->start() + 1);
}
+
_session->locations()->add (loc, false);
_session->set_auto_punch_location (loc);
} else {
region_edit_menu_split_item = 0;
region_edit_menu_split_multichannel_item = 0;
+ /* we might try to use items that are currently attached to a crossfade menu,
+ so clear that, too.
+ */
+ track_crossfade_context_menu.items().clear ();
+
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (clicked_axisview);
if (rtv) {
boost::shared_ptr<Track> tr;
boost::shared_ptr<Playlist> pl;
- /* Don't offer a region submenu if we are in internal edit mode, as we don't select regions in this
- mode and so offering region context is somewhat confusing.
- */
- if ((tr = rtv->track()) && ((pl = tr->playlist())) && !internal_editing()) {
+ if ((tr = rtv->track()) && ((pl = tr->playlist()))) {
framepos_t const framepos = (framepos_t) floor ((double) get_preferred_edit_position() * tr->speed());
uint32_t regions_at = pl->count_regions_at (framepos);
add_region_context_items (edit_items, regions_at > 1);
MenuList& edit_items = track_crossfade_context_menu.items();
edit_items.clear ();
+ /* we might try to use items that are currently attached to a crossfade menu,
+ so clear that, too.
+ */
+ track_region_context_menu.items().clear ();
+
AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*> (clicked_axisview);
if (atv) {
}
}
- set_default_size (g.base_width, g.base_height);
+ //set_default_size (g.base_width, g.base_height);
move (x, y);
-
+
if (_session && (prop = node.property ("playhead"))) {
framepos_t pos;
sscanf (prop->value().c_str(), "%" PRIi64, &pos);
set_mouse_mode (MouseObject, true);
}
- if ((prop = node.property ("left-frame")) != 0){
+ if ((prop = node.property ("left-frame")) != 0) {
framepos_t pos;
if (sscanf (prop->value().c_str(), "%" PRId64, &pos) == 1) {
reset_x_origin (pos);
}
}
+void
+Editor::begin_reversible_command (GQuark q)
+{
+ if (_session) {
+ _session->begin_reversible_command (q);
+ }
+}
+
void
Editor::commit_reversible_command ()
{
}
for (TrackViewList::const_iterator t = tracks->begin(); t != tracks->end(); ++t) {
+
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(*t);
+
if (rtv) {
boost::shared_ptr<Track> tr;
boost::shared_ptr<Playlist> pl;
if ((tr = rtv->track()) && ((pl = tr->playlist()))) {
Playlist::RegionList* regions = pl->regions_at (
- (framepos_t) floor ( (double)where * tr->speed()));
+ (framepos_t) floor ( (double) where * tr->speed()));
for (Playlist::RegionList::iterator i = regions->begin(); i != regions->end(); ++i) {
RegionView* rv = rtv->view()->find_view (*i);
}
}
+/** Start with regions that are selected. Then add equivalent regions
+ * on tracks in the same active edit-enabled route group as any of
+ * the regions that we started with.
+ */
+
+RegionSelection
+Editor::get_regions_from_selection ()
+{
+ return get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id);
+}
+
/** Get regions using the following method:
*
* Make an initial region list using the selected regions, unless
for (RegionSelection::iterator i = regions.begin (); i != regions.end(); ++i) {
RouteGroup* g = (*i)->get_time_axis_view().route_group ();
+
if (g && g->is_active() && g->is_edit()) {
tracks.add (axis_views_from_routes (g->route_list()));
}
-
}
if (!tracks.empty()) {
return regions;
}
+/** Start with regions that are selected, or the entered regionview if none are selected.
+ * Then add equivalent regions on tracks in the same active edit-enabled route group as any
+ * of the regions that we started with.
+ */
RegionSelection
Editor::get_regions_from_selection_and_entered ()
{
- RegionSelection rs = selection->regions;
+ RegionSelection regions = selection->regions;
- if (rs.empty() && entered_regionview) {
- rs.add (entered_regionview);
+ if (regions.empty() && entered_regionview) {
+ regions.add (entered_regionview);
}
- return rs;
+ return get_equivalent_regions (regions, ARDOUR::Properties::edit.property_id);
}
void
_summary->set_dirty ();
}
+void
+Editor::region_view_removed ()
+{
+ _summary->set_dirty ();
+}
+
TimeAxisView*
Editor::axis_view_from_route (boost::shared_ptr<Route> r) const
{
RouteTimeAxisView *rtv;
list<RouteTimeAxisView*> new_views;
+ cerr << "Handle new route\n";
+
for (RouteList::iterator x = routes.begin(); x != routes.end(); ++x) {
boost::shared_ptr<Route> route = (*x);
rtv->effective_gain_display ();
rtv->view()->RegionViewAdded.connect (sigc::mem_fun (*this, &Editor::region_view_added));
+ rtv->view()->RegionViewRemoved.connect (sigc::mem_fun (*this, &Editor::region_view_removed));
}
_routes->routes_added (new_views);
return true;
}
+