mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 23:35:03 +01:00
many changes, large and small, related to smart mode editing, range/region selection, and behaviour of playhead when always-play-range is enabled. could be buggy, but probably in subtle (or even very subtle) ways rather than obvious
git-svn-id: svn://localhost/ardour2/branches/3.0@11394 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
664cec2135
commit
7629120cda
13 changed files with 152 additions and 84 deletions
|
|
@ -1728,12 +1728,12 @@ ARDOUR_UI::transport_roll ()
|
||||||
if (!Config->get_seamless_loop()) {
|
if (!Config->get_seamless_loop()) {
|
||||||
_session->request_play_loop (false, true);
|
_session->request_play_loop (false, true);
|
||||||
}
|
}
|
||||||
} else if (_session->get_play_range () && !join_play_range_button.active_state()) {
|
} else if (_session->get_play_range () && !Config->get_always_play_range()) {
|
||||||
/* stop playing a range if we currently are */
|
/* stop playing a range if we currently are */
|
||||||
_session->request_play_range (0, true);
|
_session->request_play_range (0, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (join_play_range_button.active_state()) {
|
if (Config->get_always_play_range()) {
|
||||||
_session->request_play_range (&editor->get_selection().time, true);
|
_session->request_play_range (&editor->get_selection().time, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1792,7 +1792,7 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode)
|
||||||
if (rolling) {
|
if (rolling) {
|
||||||
_session->request_stop (with_abort, true);
|
_session->request_stop (with_abort, true);
|
||||||
} else {
|
} else {
|
||||||
if (join_play_range_button.active_state()) {
|
if (Config->get_always_play_range ()) {
|
||||||
_session->request_play_range (&editor->get_selection().time, true);
|
_session->request_play_range (&editor->get_selection().time, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1957,7 +1957,7 @@ ARDOUR_UI::map_transport_state ()
|
||||||
auto_loop_button.unset_active_state ();
|
auto_loop_button.unset_active_state ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (join_play_range_button.active_state()) {
|
if (Config->get_always_play_range()) {
|
||||||
/* light up both roll and play-selection if they are joined */
|
/* light up both roll and play-selection if they are joined */
|
||||||
roll_button.set_active_state (Gtkmm2ext::Active);
|
roll_button.set_active_state (Gtkmm2ext::Active);
|
||||||
play_selection_button.set_active_state (Gtkmm2ext::Active);
|
play_selection_button.set_active_state (Gtkmm2ext::Active);
|
||||||
|
|
|
||||||
|
|
@ -418,7 +418,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
|
||||||
boost::shared_ptr<TransportControllable> play_selection_controllable;
|
boost::shared_ptr<TransportControllable> play_selection_controllable;
|
||||||
boost::shared_ptr<TransportControllable> rec_controllable;
|
boost::shared_ptr<TransportControllable> rec_controllable;
|
||||||
|
|
||||||
void join_play_range_clicked ();
|
void toggle_always_play_range ();
|
||||||
|
|
||||||
void set_transport_controllable_state (const XMLNode&);
|
void set_transport_controllable_state (const XMLNode&);
|
||||||
XMLNode& get_transport_controllable_state ();
|
XMLNode& get_transport_controllable_state ();
|
||||||
|
|
|
||||||
|
|
@ -294,8 +294,8 @@ ARDOUR_UI::setup_transport ()
|
||||||
midi_panic_button.set_related_action (act);
|
midi_panic_button.set_related_action (act);
|
||||||
act = ActionManager::get_action (X_("Transport"), X_("ToggleExternalSync"));
|
act = ActionManager::get_action (X_("Transport"), X_("ToggleExternalSync"));
|
||||||
sync_button.set_related_action (act);
|
sync_button.set_related_action (act);
|
||||||
|
act = ActionManager::get_action (X_("Transport"), X_("AlwaysPlayRange"));
|
||||||
join_play_range_button.signal_clicked.connect (sigc::mem_fun (*this, &ARDOUR_UI::join_play_range_clicked));
|
join_play_range_button.set_related_action (act);
|
||||||
|
|
||||||
/* clocks, etc. */
|
/* clocks, etc. */
|
||||||
|
|
||||||
|
|
@ -624,7 +624,15 @@ ARDOUR_UI::click_button_clicked (GdkEventButton* ev)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ARDOUR_UI::join_play_range_clicked ()
|
ARDOUR_UI::toggle_always_play_range ()
|
||||||
{
|
{
|
||||||
join_play_range_button.set_active (!join_play_range_button.get_active());
|
RefPtr<Action> act = ActionManager::get_action (X_("Transport"), X_("AlwaysPlayRange"));
|
||||||
|
assert (act);
|
||||||
|
|
||||||
|
RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic (act);
|
||||||
|
assert (tact);
|
||||||
|
|
||||||
|
Config->set_always_play_range (tact->get_active ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -288,6 +288,10 @@ ARDOUR_UI::install_actions ()
|
||||||
ActionManager::session_sensitive_actions.push_back (act);
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
ActionManager::transport_sensitive_actions.push_back (act);
|
ActionManager::transport_sensitive_actions.push_back (act);
|
||||||
|
|
||||||
|
act = ActionManager::register_toggle_action (transport_actions, X_("AlwaysPlayRange"), _("Always Play Range"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_always_play_range));
|
||||||
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
|
ActionManager::transport_sensitive_actions.push_back (act);
|
||||||
|
|
||||||
act = ActionManager::register_action (transport_actions, X_("ToggleRoll"), _("Start/Stop"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::toggle_roll), false, false));
|
act = ActionManager::register_action (transport_actions, X_("ToggleRoll"), _("Start/Stop"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::toggle_roll), false, false));
|
||||||
ActionManager::session_sensitive_actions.push_back (act);
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
ActionManager::transport_sensitive_actions.push_back (act);
|
ActionManager::transport_sensitive_actions.push_back (act);
|
||||||
|
|
|
||||||
|
|
@ -318,6 +318,10 @@ ARDOUR_UI::parameter_changed (std::string p)
|
||||||
ActionManager::get_action ("Transport", "ToggleAutoReturn")->set_sensitive (false);
|
ActionManager::get_action ("Transport", "ToggleAutoReturn")->set_sensitive (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else if (p == "always-play-range") {
|
||||||
|
|
||||||
|
ActionManager::map_some_state ("Transport", "AlwaysPlayRange", &RCConfiguration::get_always_play_range);
|
||||||
|
|
||||||
} else if (p == "send-mtc") {
|
} else if (p == "send-mtc") {
|
||||||
|
|
||||||
ActionManager::map_some_state ("options", "SendMTC", &RCConfiguration::get_send_mtc);
|
ActionManager::map_some_state ("options", "SendMTC", &RCConfiguration::get_send_mtc);
|
||||||
|
|
|
||||||
|
|
@ -281,6 +281,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||||
void invert_selection_in_track ();
|
void invert_selection_in_track ();
|
||||||
void invert_selection ();
|
void invert_selection ();
|
||||||
void deselect_all ();
|
void deselect_all ();
|
||||||
|
long select_range (framepos_t, framepos_t);
|
||||||
|
|
||||||
void set_selected_regionview_from_region_list (boost::shared_ptr<ARDOUR::Region> region, Selection::Operation op = Selection::Set);
|
void set_selected_regionview_from_region_list (boost::shared_ptr<ARDOUR::Region> region, Selection::Operation op = Selection::Set);
|
||||||
|
|
||||||
|
|
@ -652,15 +653,13 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||||
|
|
||||||
bool set_selected_control_point_from_click (Selection::Operation op = Selection::Set, bool no_remove=false);
|
bool set_selected_control_point_from_click (Selection::Operation op = Selection::Set, bool no_remove=false);
|
||||||
void set_selected_track_from_click (bool press, Selection::Operation op = Selection::Set, bool no_remove=false);
|
void set_selected_track_from_click (bool press, Selection::Operation op = Selection::Set, bool no_remove=false);
|
||||||
void set_selected_track_as_side_effect (Selection::Operation op, bool force = false);
|
void set_selected_track_as_side_effect (Selection::Operation op);
|
||||||
bool set_selected_regionview_from_click (bool press, Selection::Operation op = Selection::Set, bool no_track_remove=false);
|
bool set_selected_regionview_from_click (bool press, Selection::Operation op = Selection::Set);
|
||||||
|
|
||||||
bool set_selected_regionview_from_map_event (GdkEventAny*, StreamView*, boost::weak_ptr<ARDOUR::Region>);
|
bool set_selected_regionview_from_map_event (GdkEventAny*, StreamView*, boost::weak_ptr<ARDOUR::Region>);
|
||||||
void collect_new_region_view (RegionView *);
|
void collect_new_region_view (RegionView *);
|
||||||
void collect_and_select_new_region_view (RegionView *);
|
void collect_and_select_new_region_view (RegionView *);
|
||||||
|
|
||||||
long select_range_around_region (RegionView *);
|
|
||||||
|
|
||||||
Gtk::Menu track_context_menu;
|
Gtk::Menu track_context_menu;
|
||||||
Gtk::Menu track_region_context_menu;
|
Gtk::Menu track_region_context_menu;
|
||||||
Gtk::Menu track_selection_context_menu;
|
Gtk::Menu track_selection_context_menu;
|
||||||
|
|
@ -2082,6 +2081,16 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||||
|
|
||||||
int time_fx (ARDOUR::RegionList&, float val, bool pitching);
|
int time_fx (ARDOUR::RegionList&, float val, bool pitching);
|
||||||
|
|
||||||
|
bool doing_range_stuff() const {
|
||||||
|
return (mouse_mode == Editing::MouseRange && (_join_object_range_state == JOIN_OBJECT_RANGE_NONE)) ||
|
||||||
|
_join_object_range_state == JOIN_OBJECT_RANGE_RANGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool doing_object_stuff() const {
|
||||||
|
return (mouse_mode == Editing::MouseObject && (_join_object_range_state == JOIN_OBJECT_RANGE_NONE)) ||
|
||||||
|
_join_object_range_state == JOIN_OBJECT_RANGE_OBJECT;
|
||||||
|
}
|
||||||
|
|
||||||
friend class Drag;
|
friend class Drag;
|
||||||
friend class RegionDrag;
|
friend class RegionDrag;
|
||||||
friend class RegionMoveDrag;
|
friend class RegionMoveDrag;
|
||||||
|
|
|
||||||
|
|
@ -897,6 +897,10 @@ RegionMoveDrag::finished (GdkEvent* ev, bool movement_occurred)
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_editor->session() && Config->get_always_play_range()) {
|
||||||
|
_editor->session()->request_locate (_editor->get_selection().regions.start());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -3364,6 +3368,7 @@ SelectionDrag::SelectionDrag (Editor* e, ArdourCanvas::Item* i, Operation o)
|
||||||
, _copy (false)
|
, _copy (false)
|
||||||
, _original_pointer_time_axis (-1)
|
, _original_pointer_time_axis (-1)
|
||||||
, _last_pointer_time_axis (-1)
|
, _last_pointer_time_axis (-1)
|
||||||
|
, _time_selection_at_start (!_editor->get_selection().time.empty())
|
||||||
{
|
{
|
||||||
DEBUG_TRACE (DEBUG::Drags, "New SelectionDrag\n");
|
DEBUG_TRACE (DEBUG::Drags, "New SelectionDrag\n");
|
||||||
}
|
}
|
||||||
|
|
@ -3595,16 +3600,42 @@ SelectionDrag::finished (GdkEvent* event, bool movement_occurred)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* XXX what if its a music time selection? */
|
/* XXX what if its a music time selection? */
|
||||||
if (s && (s->config.get_auto_play() || (s->get_play_range() && s->transport_rolling()))) {
|
if (s) {
|
||||||
s->request_play_range (&_editor->selection->time, true);
|
if ((s->config.get_auto_play() || (s->get_play_range() && s->transport_rolling()))) {
|
||||||
|
s->request_play_range (&_editor->selection->time, true);
|
||||||
|
} else {
|
||||||
|
if (Config->get_always_play_range()) {
|
||||||
|
if (_editor->doing_range_stuff()) {
|
||||||
|
s->request_locate (_editor->get_selection().time.start());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/* just a click, no pointer movement.*/
|
/* just a click, no pointer movement.
|
||||||
|
*/
|
||||||
|
|
||||||
if (Keyboard::no_modifier_keys_pressed (&event->button)) {
|
if (Keyboard::no_modifier_keys_pressed (&event->button)) {
|
||||||
_editor->selection->clear_time();
|
if (!_time_selection_at_start) {
|
||||||
|
if (_editor->clicked_regionview) {
|
||||||
|
if (_editor->get_selection().selected (_editor->clicked_regionview)) {
|
||||||
|
/* range select the entire current
|
||||||
|
region selection
|
||||||
|
*/
|
||||||
|
_editor->select_range (_editor->get_selection().regions.start(),
|
||||||
|
_editor->get_selection().regions.end_frame());
|
||||||
|
} else {
|
||||||
|
/* range select this (unselected)
|
||||||
|
* region
|
||||||
|
*/
|
||||||
|
_editor->select_range (_editor->clicked_regionview->region()->position(),
|
||||||
|
_editor->clicked_regionview->region()->last_frame());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_editor->selection->clear_time();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_editor->clicked_axisview && !_editor->selection->selected (_editor->clicked_axisview)) {
|
if (_editor->clicked_axisview && !_editor->selection->selected (_editor->clicked_axisview)) {
|
||||||
|
|
@ -3615,6 +3646,11 @@ SelectionDrag::finished (GdkEvent* event, bool movement_occurred)
|
||||||
s->request_stop (false, false);
|
s->request_stop (false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Config->get_always_play_range()) {
|
||||||
|
if (_editor->doing_range_stuff()) {
|
||||||
|
s->request_locate (_editor->get_selection().time.start());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_editor->stop_canvas_autoscroll ();
|
_editor->stop_canvas_autoscroll ();
|
||||||
|
|
|
||||||
|
|
@ -892,6 +892,7 @@ private:
|
||||||
int _original_pointer_time_axis;
|
int _original_pointer_time_axis;
|
||||||
int _last_pointer_time_axis;
|
int _last_pointer_time_axis;
|
||||||
std::list<TimeAxisView*> _added_time_axes;
|
std::list<TimeAxisView*> _added_time_axes;
|
||||||
|
bool _time_selection_at_start;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Range marker drag */
|
/** Range marker drag */
|
||||||
|
|
|
||||||
|
|
@ -596,14 +596,21 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
|
||||||
|
|
||||||
switch (item_type) {
|
switch (item_type) {
|
||||||
case RegionItem:
|
case RegionItem:
|
||||||
if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
|
if (!doing_range_stuff()) {
|
||||||
set_selected_regionview_from_click (press, op, true);
|
set_selected_regionview_from_click (press, op);
|
||||||
} else if (press) {
|
|
||||||
selection->clear_tracks ();
|
|
||||||
set_selected_track_as_side_effect (op, true);
|
|
||||||
}
|
}
|
||||||
if (_join_object_range_state == JOIN_OBJECT_RANGE_OBJECT && !selection->regions.empty()) {
|
|
||||||
clicked_selection = select_range_around_region (selection->regions.front());
|
if (press) {
|
||||||
|
if (doing_range_stuff()) {
|
||||||
|
/* don't change the selection unless the
|
||||||
|
clicked track is not currently selected. if
|
||||||
|
so, "collapse" the selection to just this
|
||||||
|
track
|
||||||
|
*/
|
||||||
|
if (!selection->selected (clicked_axisview)) {
|
||||||
|
set_selected_track_as_side_effect (Selection::Set);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -611,8 +618,8 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
|
||||||
case RegionViewName:
|
case RegionViewName:
|
||||||
case LeftFrameHandle:
|
case LeftFrameHandle:
|
||||||
case RightFrameHandle:
|
case RightFrameHandle:
|
||||||
if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
|
if (doing_object_stuff() || (mouse_mode != MouseRange && mouse_mode != MouseObject)) {
|
||||||
set_selected_regionview_from_click (press, op, true);
|
set_selected_regionview_from_click (press, op);
|
||||||
} else if (event->type == GDK_BUTTON_PRESS) {
|
} else if (event->type == GDK_BUTTON_PRESS) {
|
||||||
set_selected_track_as_side_effect (op);
|
set_selected_track_as_side_effect (op);
|
||||||
}
|
}
|
||||||
|
|
@ -623,16 +630,16 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
|
||||||
case FadeInItem:
|
case FadeInItem:
|
||||||
case FadeOutHandleItem:
|
case FadeOutHandleItem:
|
||||||
case FadeOutItem:
|
case FadeOutItem:
|
||||||
if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
|
if (doing_object_stuff() || (mouse_mode != MouseRange && mouse_mode != MouseObject)) {
|
||||||
set_selected_regionview_from_click (press, op, true);
|
set_selected_regionview_from_click (press, op);
|
||||||
} else if (event->type == GDK_BUTTON_PRESS) {
|
} else if (event->type == GDK_BUTTON_PRESS) {
|
||||||
set_selected_track_as_side_effect (op);
|
set_selected_track_as_side_effect (op);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ControlPointItem:
|
case ControlPointItem:
|
||||||
set_selected_track_as_side_effect (op, true);
|
set_selected_track_as_side_effect (op);
|
||||||
if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
|
if (doing_object_stuff() || (mouse_mode != MouseRange && mouse_mode != MouseObject)) {
|
||||||
set_selected_control_point_from_click (op, false);
|
set_selected_control_point_from_click (op, false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -641,12 +648,12 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
|
||||||
/* for context click, select track */
|
/* for context click, select track */
|
||||||
if (event->button.button == 3) {
|
if (event->button.button == 3) {
|
||||||
selection->clear_tracks ();
|
selection->clear_tracks ();
|
||||||
set_selected_track_as_side_effect (op, true);
|
set_selected_track_as_side_effect (op);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AutomationTrackItem:
|
case AutomationTrackItem:
|
||||||
set_selected_track_as_side_effect (op, true);
|
set_selected_track_as_side_effect (op);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
@ -846,7 +853,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
|
|
||||||
case LeftFrameHandle:
|
case LeftFrameHandle:
|
||||||
case RightFrameHandle:
|
case RightFrameHandle:
|
||||||
if (!internal_editing() && !clicked_regionview->region()->locked()) {
|
if (!internal_editing() && doing_object_stuff() && !clicked_regionview->region()->locked()) {
|
||||||
RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.property_id);
|
RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.property_id);
|
||||||
_drags->set (new TrimDrag (this, item, clicked_regionview, s.by_layer()), event);
|
_drags->set (new TrimDrag (this, item, clicked_regionview, s.by_layer()), event);
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -938,7 +945,8 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
add_region_drag (item, event, clicked_regionview);
|
add_region_drag (item, event, clicked_regionview);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!internal_editing() && (_join_object_range_state == JOIN_OBJECT_RANGE_OBJECT && !selection->regions.empty())) {
|
|
||||||
|
if (!internal_editing() && (_join_object_range_state == JOIN_OBJECT_RANGE_RANGE && !selection->regions.empty())) {
|
||||||
_drags->add (new SelectionDrag (this, clicked_axisview->get_selection_rect (clicked_selection)->rect, SelectionDrag::SelectionMove));
|
_drags->add (new SelectionDrag (this, clicked_axisview->get_selection_rect (clicked_selection)->rect, SelectionDrag::SelectionMove));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1026,7 +1034,8 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
boost::shared_ptr<Region> r = pl->top_region_at (event_frame (event));
|
boost::shared_ptr<Region> r = pl->top_region_at (event_frame (event));
|
||||||
if (r) {
|
if (r) {
|
||||||
RegionView* rv = rtv->view()->find_view (r);
|
RegionView* rv = rtv->view()->find_view (r);
|
||||||
clicked_selection = select_range_around_region (rv);
|
clicked_selection = select_range (rv->region()->position(),
|
||||||
|
rv->region()->last_frame()+1);
|
||||||
_drags->add (new SelectionDrag (this, item, SelectionDrag::SelectionMove));
|
_drags->add (new SelectionDrag (this, item, SelectionDrag::SelectionMove));
|
||||||
list<RegionView*> rvs;
|
list<RegionView*> rvs;
|
||||||
rvs.push_back (rv);
|
rvs.push_back (rv);
|
||||||
|
|
@ -1619,7 +1628,6 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -1770,10 +1778,9 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
||||||
|
|
||||||
case AutomationLineItem:
|
case AutomationLineItem:
|
||||||
if (mouse_mode == MouseGain || mouse_mode == MouseObject) {
|
if (mouse_mode == MouseGain || mouse_mode == MouseObject) {
|
||||||
{
|
ArdourCanvas::Line *line = dynamic_cast<ArdourCanvas::Line *> (item);
|
||||||
ArdourCanvas::Line *line = dynamic_cast<ArdourCanvas::Line *> (item);
|
if (line) {
|
||||||
if (line)
|
line->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_EnteredAutomationLine.get();
|
||||||
line->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_EnteredAutomationLine.get();
|
|
||||||
}
|
}
|
||||||
if (is_drawable()) {
|
if (is_drawable()) {
|
||||||
set_canvas_cursor (_cursors->fader);
|
set_canvas_cursor (_cursors->fader);
|
||||||
|
|
@ -1782,7 +1789,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RegionViewNameHighlight:
|
case RegionViewNameHighlight:
|
||||||
if (is_drawable() && mouse_mode == MouseObject && entered_regionview) {
|
if (is_drawable() && doing_object_stuff() && entered_regionview) {
|
||||||
set_canvas_cursor_for_region_view (event->crossing.x, entered_regionview);
|
set_canvas_cursor_for_region_view (event->crossing.x, entered_regionview);
|
||||||
_over_region_trim_target = true;
|
_over_region_trim_target = true;
|
||||||
}
|
}
|
||||||
|
|
@ -1790,7 +1797,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
||||||
|
|
||||||
case LeftFrameHandle:
|
case LeftFrameHandle:
|
||||||
case RightFrameHandle:
|
case RightFrameHandle:
|
||||||
if (is_drawable() && mouse_mode == MouseObject && !internal_editing() && entered_regionview) {
|
if (is_drawable() && doing_object_stuff() && !internal_editing() && entered_regionview) {
|
||||||
set_canvas_cursor_for_region_view (event->crossing.x, entered_regionview);
|
set_canvas_cursor_for_region_view (event->crossing.x, entered_regionview);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -2720,8 +2727,11 @@ Editor::set_internal_edit (bool yn)
|
||||||
void
|
void
|
||||||
Editor::update_join_object_range_location (double /*x*/, double y)
|
Editor::update_join_object_range_location (double /*x*/, double y)
|
||||||
{
|
{
|
||||||
/* XXX: actually, this decides based on whether the mouse is in the top or bottom half of a RouteTimeAxisView;
|
/* XXX: actually, this decides based on whether the mouse is in the top
|
||||||
entered_{track,regionview} is not always setup (e.g. if the mouse is over a TimeSelection), and to get a Region
|
or bottom half of a the waveform part RouteTimeAxisView;
|
||||||
|
|
||||||
|
Note that entered_{track,regionview} is not always setup (e.g. if
|
||||||
|
the mouse is over a TimeSelection), and to get a Region
|
||||||
that we're over requires searching the playlist.
|
that we're over requires searching the playlist.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -2748,7 +2758,7 @@ Editor::update_join_object_range_location (double /*x*/, double y)
|
||||||
double cy = y;
|
double cy = y;
|
||||||
rtv->canvas_display()->w2i (cx, cy);
|
rtv->canvas_display()->w2i (cx, cy);
|
||||||
|
|
||||||
double const c = cy / rtv->view()->child_height();
|
double const c = cy / (rtv->view()->child_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE);
|
||||||
double d;
|
double d;
|
||||||
double const f = modf (c, &d);
|
double const f = modf (c, &d);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3594,8 +3594,7 @@ Editor::cut_copy (CutCopyOp op)
|
||||||
|
|
||||||
/* we only want to cut regions if some are selected */
|
/* we only want to cut regions if some are selected */
|
||||||
|
|
||||||
switch (current_mouse_mode()) {
|
if (doing_object_stuff()) {
|
||||||
case MouseObject:
|
|
||||||
rs = get_regions_from_selection ();
|
rs = get_regions_from_selection ();
|
||||||
if (!rs.empty() || !selection->points.empty()) {
|
if (!rs.empty() || !selection->points.empty()) {
|
||||||
|
|
||||||
|
|
@ -3617,15 +3616,15 @@ Editor::cut_copy (CutCopyOp op)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
commit_reversible_command ();
|
commit_reversible_command ();
|
||||||
break; // terminate case statement here
|
goto out;
|
||||||
}
|
}
|
||||||
if (!selection->time.empty()) {
|
if (!selection->time.empty() && (_join_object_range_state == JOIN_OBJECT_RANGE_NONE)) {
|
||||||
/* don't cause suprises */
|
/* don't cause suprises */
|
||||||
break;
|
goto out;
|
||||||
}
|
}
|
||||||
// fall thru if there was nothing selected
|
}
|
||||||
|
|
||||||
case MouseRange:
|
if (doing_range_stuff()) {
|
||||||
if (selection->time.empty()) {
|
if (selection->time.empty()) {
|
||||||
framepos_t start, end;
|
framepos_t start, end;
|
||||||
if (!get_edit_op_range (start, end)) {
|
if (!get_edit_op_range (start, end)) {
|
||||||
|
|
@ -3641,14 +3640,10 @@ Editor::cut_copy (CutCopyOp op)
|
||||||
if (op == Cut || op == Delete) {
|
if (op == Cut || op == Delete) {
|
||||||
selection->clear_time ();
|
selection->clear_time ();
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
if (op == Delete || op == Cut || op == Clear) {
|
if (op == Delete || op == Cut || op == Clear) {
|
||||||
_drags->abort ();
|
_drags->abort ();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -177,13 +177,12 @@ Editor::select_all_tracks ()
|
||||||
* tracks, in which case nothing will happen unless `force' is true.
|
* tracks, in which case nothing will happen unless `force' is true.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
Editor::set_selected_track_as_side_effect (Selection::Operation op, bool /*force*/)
|
Editor::set_selected_track_as_side_effect (Selection::Operation op)
|
||||||
{
|
{
|
||||||
if (!clicked_axisview) {
|
if (!clicked_axisview) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 1
|
|
||||||
if (!clicked_routeview) {
|
if (!clicked_routeview) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -265,18 +264,6 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op, bool /*force
|
||||||
cerr << ("Editor::set_selected_track_as_side_effect case Selection::Add not yet implemented\n");
|
cerr << ("Editor::set_selected_track_as_side_effect case Selection::Add not yet implemented\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else // the older version
|
|
||||||
|
|
||||||
if (!selection->tracks.empty()) {
|
|
||||||
if (!selection->selected (clicked_axisview)) {
|
|
||||||
selection->add (clicked_axisview);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (force) {
|
|
||||||
selection->set (clicked_axisview);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -560,7 +547,7 @@ Editor::get_regionview_count_from_region_list (boost::shared_ptr<Region> region)
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
Editor::set_selected_regionview_from_click (bool press, Selection::Operation op, bool /*no_track_remove*/)
|
Editor::set_selected_regionview_from_click (bool press, Selection::Operation op)
|
||||||
{
|
{
|
||||||
vector<RegionView*> all_equivalent_regions;
|
vector<RegionView*> all_equivalent_regions;
|
||||||
bool commit = false;
|
bool commit = false;
|
||||||
|
|
@ -575,7 +562,6 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op,
|
||||||
|
|
||||||
if (op == Selection::Toggle || op == Selection::Set) {
|
if (op == Selection::Toggle || op == Selection::Set) {
|
||||||
|
|
||||||
|
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case Selection::Toggle:
|
case Selection::Toggle:
|
||||||
if (selection->selected (clicked_regionview)) {
|
if (selection->selected (clicked_regionview)) {
|
||||||
|
|
@ -982,6 +968,10 @@ Editor::time_selection_changed ()
|
||||||
} else {
|
} else {
|
||||||
ActionManager::set_sensitive (ActionManager::time_selection_sensitive_actions, true);
|
ActionManager::set_sensitive (ActionManager::time_selection_sensitive_actions, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_session && Config->get_always_play_range() && !_session->transport_rolling() && !selection->time.empty()) {
|
||||||
|
_session->request_locate (selection->time.start());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Set all region actions to have a given sensitivity */
|
/** Set all region actions to have a given sensitivity */
|
||||||
|
|
@ -1266,6 +1256,10 @@ Editor::region_selection_changed ()
|
||||||
*/
|
*/
|
||||||
sensitize_all_region_actions (true);
|
sensitize_all_region_actions (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_session && Config->get_always_play_range() && !_session->transport_rolling() && !selection->regions.empty()) {
|
||||||
|
_session->request_locate (selection->regions.start());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -1851,13 +1845,9 @@ Editor::deselect_all ()
|
||||||
}
|
}
|
||||||
|
|
||||||
long
|
long
|
||||||
Editor::select_range_around_region (RegionView* rv)
|
Editor::select_range (framepos_t s, framepos_t e)
|
||||||
{
|
{
|
||||||
assert (rv);
|
selection->add (clicked_axisview);
|
||||||
|
|
||||||
selection->set (&rv->get_time_axis_view());
|
|
||||||
|
|
||||||
selection->time.clear ();
|
selection->time.clear ();
|
||||||
boost::shared_ptr<Region> r = rv->region ();
|
return selection->set (s, e);
|
||||||
return selection->set (r->position(), r->position() + r->length());
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -748,11 +748,21 @@ Selection::set (RegionView* r, bool also_clear_tracks)
|
||||||
void
|
void
|
||||||
Selection::set (vector<RegionView*>& v)
|
Selection::set (vector<RegionView*>& v)
|
||||||
{
|
{
|
||||||
|
bool had_regions = !regions.empty();
|
||||||
|
|
||||||
clear_regions ();
|
clear_regions ();
|
||||||
|
|
||||||
if (Config->get_link_region_and_track_selection()) {
|
if (Config->get_link_region_and_track_selection()) {
|
||||||
clear_tracks ();
|
if (had_regions) {
|
||||||
// make sure to deselect any automation selections
|
/* there were regions before, so we're changing the
|
||||||
clear_points();
|
* region selection (likely), thus link region/track
|
||||||
|
* selection. relevant tracks will get selected
|
||||||
|
* as we ::add() below.
|
||||||
|
*/
|
||||||
|
clear_tracks ();
|
||||||
|
// make sure to deselect any automation selections
|
||||||
|
clear_points();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
add (v);
|
add (v);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -129,6 +129,7 @@ CONFIG_VARIABLE (bool, secondary_clock_delta_edit_cursor, "secondary-clock-delta
|
||||||
CONFIG_VARIABLE (bool, show_track_meters, "show-track-meters", true)
|
CONFIG_VARIABLE (bool, show_track_meters, "show-track-meters", true)
|
||||||
CONFIG_VARIABLE (bool, locate_while_waiting_for_sync, "locate-while-waiting-for-sync", false)
|
CONFIG_VARIABLE (bool, locate_while_waiting_for_sync, "locate-while-waiting-for-sync", false)
|
||||||
CONFIG_VARIABLE (bool, disable_disarm_during_roll, "disable-disarm-during-roll", false)
|
CONFIG_VARIABLE (bool, disable_disarm_during_roll, "disable-disarm-during-roll", false)
|
||||||
|
CONFIG_VARIABLE (bool, always_play_range, "always-play-range", false)
|
||||||
|
|
||||||
/* metering */
|
/* metering */
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue