Add region polarity invert to Region menu
This commit is contained in:
parent
9819cdb117
commit
0f949bc02b
@ -385,6 +385,7 @@
|
||||
<menuitem action='cut-region-gain'/>
|
||||
<menuitem action='reset-region-gain'/>
|
||||
<menuitem action='reset-region-gain-envelopes'/>
|
||||
<menuitem action='toggle-region-polarity'/>
|
||||
<menuitem action='toggle-region-gain-envelope-active'/>
|
||||
</menu>
|
||||
<menu action='RegionMenuPosition'>
|
||||
@ -931,6 +932,7 @@
|
||||
<menuitem action='cut-region-gain'/>
|
||||
<menuitem action='reset-region-gain'/>
|
||||
<menuitem action='reset-region-gain-envelopes'/>
|
||||
<menuitem action='toggle-region-polarity'/>
|
||||
<menuitem action='toggle-region-gain-envelope-active'/>
|
||||
</menu>
|
||||
<menu action='RegionMenuFades'>
|
||||
|
@ -2314,6 +2314,7 @@ private:
|
||||
void set_gain_envelope_visibility ();
|
||||
void set_region_gain_visibility (RegionView*);
|
||||
void toggle_gain_envelope_active ();
|
||||
void toggle_region_polarity ();
|
||||
void reset_region_gain_envelopes ();
|
||||
|
||||
void session_state_saved (std::string);
|
||||
|
@ -1911,6 +1911,8 @@ Editor::register_region_actions ()
|
||||
|
||||
register_toggle_region_action (_region_actions, RegionActionTarget (SelectedRegions|EnteredRegions), "toggle-region-gain-envelope-active", _("Envelope Active"), sigc::mem_fun (*this, &Editor::toggle_gain_envelope_active));
|
||||
|
||||
register_toggle_region_action (_region_actions, RegionActionTarget (SelectedRegions|EnteredRegions), "toggle-region-polarity", _("Invert Polarity"), sigc::mem_fun (*this, &Editor::toggle_region_polarity));
|
||||
|
||||
register_region_action (_region_actions, RegionActionTarget (SelectedRegions|EnteredRegions), "quantize-region", _("Quantize..."), sigc::mem_fun (*this, &Editor::quantize_region));
|
||||
register_region_action (_region_actions, RegionActionTarget (SelectedRegions|EnteredRegions), "legatize-region", _("Legatize"), sigc::bind(sigc::mem_fun (*this, &Editor::legatize_region), false));
|
||||
register_region_action (_region_actions, RegionActionTarget (SelectedRegions|EnteredRegions), "deinterlace-midi", _("Deinterlace Into Layers"), sigc::mem_fun (*this, &Editor::deinterlace_selected_midi_regions));
|
||||
|
@ -6409,6 +6409,41 @@ Editor::set_gain_envelope_visibility ()
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Editor::toggle_region_polarity ()
|
||||
{
|
||||
if (_ignore_region_action) {
|
||||
return;
|
||||
}
|
||||
|
||||
RegionSelection rs = get_regions_from_selection_and_entered ();
|
||||
|
||||
if (!_session || rs.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
bool in_command = false;
|
||||
|
||||
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
|
||||
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
|
||||
if (arv) {
|
||||
arv->region()->clear_changes ();
|
||||
gain_t scale_amplitude = arv->audio_region()->scale_amplitude ();
|
||||
arv->audio_region()->set_scale_amplitude (-1 * scale_amplitude);
|
||||
|
||||
if (!in_command) {
|
||||
begin_reversible_command (_("region polarity invery"));
|
||||
in_command = true;
|
||||
}
|
||||
_session->add_command (new StatefulDiffCommand (arv->region()));
|
||||
}
|
||||
}
|
||||
|
||||
if (in_command) {
|
||||
commit_reversible_command ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Editor::toggle_gain_envelope_active ()
|
||||
{
|
||||
|
@ -1428,6 +1428,8 @@ Editor::sensitize_the_right_region_actions (bool because_canvas_crossing)
|
||||
bool have_active_fade_in = false;
|
||||
bool have_active_fade_out = false;
|
||||
bool have_transients = false;
|
||||
bool have_inverted_polarity = false;
|
||||
bool have_non_inverted_polarity = false;
|
||||
|
||||
for (list<RegionView*>::const_iterator i = rs.begin(); i != rs.end(); ++i) {
|
||||
|
||||
@ -1509,6 +1511,9 @@ Editor::sensitize_the_right_region_actions (bool because_canvas_crossing)
|
||||
} else {
|
||||
have_inactive_fade_out = true;
|
||||
}
|
||||
|
||||
have_inverted_polarity = ar->scale_amplitude () < 0;
|
||||
have_non_inverted_polarity = ar->scale_amplitude () >= 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1565,6 +1570,10 @@ Editor::sensitize_the_right_region_actions (bool because_canvas_crossing)
|
||||
// Glib::RefPtr<ToggleAction>::cast_dynamic (_region_actions->get_action("toggle-region-gain-envelope-active"))->set_inconsistent ();
|
||||
}
|
||||
|
||||
if (have_inverted_polarity && !have_non_inverted_polarity) {
|
||||
Glib::RefPtr<ToggleAction>::cast_dynamic (_region_actions->get_action("toggle-region-polarity"))->set_active ();
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
_region_actions->get_action("loudness-analyze-region")->set_sensitive (false);
|
||||
@ -1574,6 +1583,7 @@ Editor::sensitize_the_right_region_actions (bool because_canvas_crossing)
|
||||
_region_actions->get_action("pitch-shift-region")->set_sensitive (false);
|
||||
_region_actions->get_action("strip-region-silence")->set_sensitive (false);
|
||||
_region_actions->get_action("show-rhythm-ferret")->set_sensitive (false);
|
||||
_region_actions->get_action("toggle-region-polarity")->set_sensitive (false);
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user