Decide whether to show crossfade and choose-top-region menus based on the mouse position rather than the edit point. I think this is marginally more intuitive.
git-svn-id: svn://localhost/ardour2/branches/3.0@8980 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
3495fe2038
commit
794980557f
@ -1544,10 +1544,8 @@ Editor::build_track_region_context_menu ()
|
||||
boost::shared_ptr<Track> tr;
|
||||
boost::shared_ptr<Playlist> pl;
|
||||
|
||||
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);
|
||||
if ((tr = rtv->track())) {
|
||||
add_region_context_items (edit_items, tr);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1578,18 +1576,24 @@ Editor::build_track_crossfade_context_menu ()
|
||||
if ((tr = atv->track()) && ((pl = tr->playlist()) != 0) && ((apl = boost::dynamic_pointer_cast<AudioPlaylist> (pl)) != 0)) {
|
||||
|
||||
AudioPlaylist::Crossfades xfades;
|
||||
framepos_t where;
|
||||
bool ignored;
|
||||
|
||||
apl->crossfades_at (get_preferred_edit_position (), xfades);
|
||||
/* The xfade menu is a bit of a special case, as we always use the mouse position
|
||||
to decide whether or not to display it (rather than the edit point). No particularly
|
||||
strong reasons for this, other than it is a bit surprising to right-click on a xfade
|
||||
and not get a menu.
|
||||
*/
|
||||
mouse_frame (where, ignored);
|
||||
apl->crossfades_at (where, xfades);
|
||||
|
||||
bool many = xfades.size() > 1;
|
||||
bool const many = xfades.size() > 1;
|
||||
|
||||
for (AudioPlaylist::Crossfades::iterator i = xfades.begin(); i != xfades.end(); ++i) {
|
||||
add_crossfade_context_items (atv->audio_view(), (*i), edit_items, many);
|
||||
}
|
||||
|
||||
framepos_t 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);
|
||||
add_region_context_items (edit_items, tr);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1709,7 +1713,7 @@ Editor::xfade_edit_right_region ()
|
||||
}
|
||||
|
||||
void
|
||||
Editor::add_region_context_items (Menu_Helpers::MenuList& edit_items, bool multiple_regions_at_position)
|
||||
Editor::add_region_context_items (Menu_Helpers::MenuList& edit_items, boost::shared_ptr<Track> track)
|
||||
{
|
||||
using namespace Menu_Helpers;
|
||||
|
||||
@ -1717,15 +1721,15 @@ Editor::add_region_context_items (Menu_Helpers::MenuList& edit_items, bool multi
|
||||
the standard items.
|
||||
*/
|
||||
|
||||
/* we have to hack up the region name because "_" has a special
|
||||
meaning for menu titles.
|
||||
*/
|
||||
|
||||
RegionSelection rs = get_regions_from_selection_and_entered ();
|
||||
|
||||
string::size_type pos = 0;
|
||||
string menu_item_name = (rs.size() == 1) ? rs.front()->region()->name() : _("Selected Regions");
|
||||
|
||||
/* we have to hack up the region name because "_" has a special
|
||||
meaning for menu titles.
|
||||
*/
|
||||
|
||||
while ((pos = menu_item_name.find ("_", pos)) != string::npos) {
|
||||
menu_item_name.replace (pos, 1, "__");
|
||||
pos += 2;
|
||||
@ -1739,8 +1743,17 @@ Editor::add_region_context_items (Menu_Helpers::MenuList& edit_items, bool multi
|
||||
_popup_region_menu_item->set_label (menu_item_name);
|
||||
}
|
||||
|
||||
/* Use the mouse position rather than the edit point to decide whether to show the `choose top region'
|
||||
dialogue. If we use the edit point it gets a bit messy because the user still has to click over
|
||||
*some* region in order to get the region context menu stuff to be displayed at all.
|
||||
*/
|
||||
|
||||
framepos_t mouse;
|
||||
bool ignored;
|
||||
mouse_frame (mouse, ignored);
|
||||
|
||||
edit_items.push_back (*_popup_region_menu_item);
|
||||
if (multiple_regions_at_position && (layering_order_editor == 0 || !layering_order_editor->is_visible ())) {
|
||||
if (track->playlist()->count_regions_at (mouse) > 1 && (layering_order_editor == 0 || !layering_order_editor->is_visible ())) {
|
||||
edit_items.push_back (*manage (_region_actions->get_action ("choose-top-region")->create_menu_item ()));
|
||||
}
|
||||
edit_items.push_back (SeparatorElem());
|
||||
|
@ -672,7 +672,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||
Gtk::Menu* build_track_selection_context_menu ();
|
||||
void add_dstream_context_items (Gtk::Menu_Helpers::MenuList&);
|
||||
void add_bus_context_items (Gtk::Menu_Helpers::MenuList&);
|
||||
void add_region_context_items (Gtk::Menu_Helpers::MenuList&, bool);
|
||||
void add_region_context_items (Gtk::Menu_Helpers::MenuList&, boost::shared_ptr<ARDOUR::Track>);
|
||||
void add_crossfade_context_items (AudioStreamView*, boost::shared_ptr<ARDOUR::Crossfade>, Gtk::Menu_Helpers::MenuList&, bool many);
|
||||
void add_selection_context_items (Gtk::Menu_Helpers::MenuList&);
|
||||
Gtk::MenuItem* _popup_region_menu_item;
|
||||
|
Loading…
Reference in New Issue
Block a user