Allow Separate to work on explicit range. Cleanup code by replacing mouse_edit_point_requires_canvas_actions with time_selection_sensitive_actions and consolidating some code in reset_canvas_action_sensitivity. Crop no longer works on all tracks if no tracks are selected

git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@11652 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Ben Loftis 2012-03-12 18:36:57 +00:00
parent b7954b963a
commit af4e0359be
8 changed files with 47 additions and 65 deletions

View File

@ -55,7 +55,6 @@ vector<RefPtr<Gtk::Action> > ActionManager::point_selection_sensitive_actions;
vector<RefPtr<Gtk::Action> > ActionManager::time_selection_sensitive_actions;
vector<RefPtr<Gtk::Action> > ActionManager::line_selection_sensitive_actions;
vector<RefPtr<Gtk::Action> > ActionManager::playlist_selection_sensitive_actions;
vector<RefPtr<Gtk::Action> > ActionManager::mouse_edit_point_requires_canvas_actions;
vector<RefPtr<Gtk::Action> > ActionManager::range_sensitive_actions;
vector<RefPtr<Gtk::Action> > ActionManager::jack_sensitive_actions;

View File

@ -52,7 +52,6 @@ class ActionManager
static std::vector<Glib::RefPtr<Gtk::Action> > time_selection_sensitive_actions;
static std::vector<Glib::RefPtr<Gtk::Action> > line_selection_sensitive_actions;
static std::vector<Glib::RefPtr<Gtk::Action> > playlist_selection_sensitive_actions;
static std::vector<Glib::RefPtr<Gtk::Action> > mouse_edit_point_requires_canvas_actions;
static std::vector<Glib::RefPtr<Gtk::Action> > range_sensitive_actions;
static std::vector<Glib::RefPtr<Gtk::Action> > transport_sensitive_actions;

View File

@ -2374,13 +2374,10 @@ Editor::set_edit_point_preference (EditPoint ep, bool force)
}
nframes64_t foo;
bool in_track_canvas;
bool ignored;
within_track_canvas = mouse_frame (foo, ignored);
if (!mouse_frame (foo, in_track_canvas)) {
in_track_canvas = false;
}
reset_canvas_action_sensitivity (in_track_canvas);
reset_canvas_action_sensitivity ();
instant_save ();
}
@ -3658,6 +3655,8 @@ Editor::edit_point_selection_done ()
if (ract) {
ract->set_active (true);
}
reset_canvas_action_sensitivity();
}
void

View File

@ -2164,7 +2164,7 @@ public:
bool _new_regionviews_show_envelope;
void reset_canvas_action_sensitivity (bool);
void reset_canvas_action_sensitivity ();
void toggle_gain_envelope_visibility ();
void toggle_gain_envelope_active ();
void reset_region_gain_envelopes ();

View File

@ -538,16 +538,14 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "editor-separate", _("Separate"), mem_fun(*this, &Editor::separate_region_from_selection));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::mouse_edit_point_requires_canvas_actions.push_back (act);
ActionManager::time_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "separate-from-punch", _("Separate Using Punch Range"), mem_fun(*this, &Editor::separate_region_from_punch));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::mouse_edit_point_requires_canvas_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "separate-from-loop", _("Separate Using Loop Range"), mem_fun(*this, &Editor::separate_region_from_loop));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::mouse_edit_point_requires_canvas_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "editor-crop", _("Crop"), mem_fun(*this, &Editor::crop_region_to_selection));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::mouse_edit_point_requires_canvas_actions.push_back (act);
ActionManager::time_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "editor-cut", _("Cut"), mem_fun(*this, &Editor::cut));
ActionManager::session_sensitive_actions.push_back (act);
/* Note: for now, editor-delete does the exact same thing as editor-cut */
@ -579,6 +577,7 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "crop", _("Crop"), mem_fun(*this, &Editor::crop_region_to_selection));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::time_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "insert-chunk", _("Insert Chunk"), bind (mem_fun(*this, &Editor::paste_named_selection), 1.0f));
ActionManager::session_sensitive_actions.push_back (act);
@ -1787,15 +1786,27 @@ Editor::reset_focus ()
}
void
Editor::reset_canvas_action_sensitivity (bool onoff)
Editor::reset_canvas_action_sensitivity ()
{
if (_edit_point != EditAtMouse) {
onoff = true;
}
//some actions depend on a track selection existing
ActionManager::set_sensitive (ActionManager::track_selection_sensitive_actions, !selection->tracks.empty());
//some actions depend on a track selection existing
ActionManager::set_sensitive (ActionManager::track_selection_sensitive_actions, !selection->tracks.empty());
for (vector<Glib::RefPtr<Action> >::iterator x = ActionManager::mouse_edit_point_requires_canvas_actions.begin();
x != ActionManager::mouse_edit_point_requires_canvas_actions.end(); ++x) {
(*x)->set_sensitive (onoff);
//some actions depend on a valid range existing
bool range_exists = false;
if ( !selection->time.empty() ) { //explicit range selected
range_exists = true;
} else if ( selection->tracks.empty() && selection->regions.empty() ) { //nothing selected, bail out here
range_exists = false;
} else if (_edit_point == EditAtMouse && !selection->markers.empty() && within_track_canvas) { //for mouse mode, need mouse & marker
range_exists = true;
} else if (_edit_point == EditAtSelectedMarker && !selection->markers.empty() && within_track_canvas) { //for marker mode, need marker & mouse
range_exists = true;
} else if (_edit_point == EditAtPlayhead && !selection->markers.empty()) { //for playhead mode, need playhead & marker
range_exists = true;
}
ActionManager::set_sensitive (ActionManager::time_selection_sensitive_actions, range_exists);
}

View File

@ -796,18 +796,18 @@ Editor::stop_canvas_autoscroll ()
bool
Editor::left_track_canvas (GdkEventCrossing *ev)
{
within_track_canvas = false;
within_track_canvas = false;
set_entered_track (0);
set_entered_regionview (0);
reset_canvas_action_sensitivity (false);
reset_canvas_action_sensitivity ();
return false;
}
bool
Editor::entered_track_canvas (GdkEventCrossing *ev)
{
within_track_canvas = true;
reset_canvas_action_sensitivity (true);
within_track_canvas = true;
reset_canvas_action_sensitivity ();
return FALSE;
}

View File

@ -2882,28 +2882,16 @@ Editor::separate_regions_between (const TimeSelection& ts)
void
Editor::separate_region_from_selection ()
{
/* preferentially use *all* ranges in the time selection if we're in range mode
to allow discontiguous operation, since get_edit_op_range() currently
returns a single range.
*/
if (mouse_mode == MouseRange && !selection->time.empty()) {
separate_regions_between (selection->time);
} else {
nframes64_t start;
nframes64_t end;
nframes64_t start;
nframes64_t end;
if (get_edit_op_range (start, end)) {
if (get_edit_op_range (start, end)) {
AudioRange ar (start, end, 1);
TimeSelection ts;
ts.push_back (ar);
AudioRange ar (start, end, 1);
TimeSelection ts;
ts.push_back (ar);
separate_regions_between (ts);
}
separate_regions_between (ts);
}
}
@ -2943,20 +2931,11 @@ Editor::separate_regions_using_location (Location& loc)
void
Editor::crop_region_to_selection ()
{
if (!selection->time.empty()) {
crop_region_to (selection->time.start(), selection->time.end_frame());
} else {
nframes64_t start;
nframes64_t end;
if (get_edit_op_range (start, end)) {
crop_region_to (start, end);
}
nframes64_t start;
nframes64_t end;
if (get_edit_op_range (start, end)) {
crop_region_to (start, end);
}
}
void
@ -2967,7 +2946,7 @@ Editor::crop_region_to (nframes64_t start, nframes64_t end)
TrackSelection* ts;
if (selection->tracks.empty()) {
ts = &track_views;
return;
} else {
sort_track_selection ();
ts = &selection->tracks;

View File

@ -832,7 +832,7 @@ Editor::track_selection_changed ()
(*i)->show_selected (*selection);
}
ActionManager::set_sensitive (ActionManager::track_selection_sensitive_actions, !selection->tracks.empty());
reset_canvas_action_sensitivity();
}
void
@ -856,12 +856,7 @@ Editor::time_selection_changed ()
}
}
if (selection->time.empty()) {
ActionManager::set_sensitive (ActionManager::time_selection_sensitive_actions, false);
} else {
ActionManager::set_sensitive (ActionManager::time_selection_sensitive_actions, true);
}
reset_canvas_action_sensitivity();
}
void