mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-15 19:16:40 +01:00
Merge libs/ardour and gtk2_ardour with 2.0-ongoing R2837.
git-svn-id: svn://localhost/ardour2/trunk@2883 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
73dd9d37e7
commit
bb457bb960
168 changed files with 11821 additions and 5338 deletions
|
|
@ -26,6 +26,7 @@
|
|||
#include <gtkmm2ext/window_title.h>
|
||||
|
||||
#include <ardour/location.h>
|
||||
#include <ardour/profile.h>
|
||||
#include <pbd/memento_command.h>
|
||||
|
||||
#include "editor.h"
|
||||
|
|
@ -77,9 +78,15 @@ Editor::add_new_location (Location *location)
|
|||
}
|
||||
|
||||
if (location->is_mark()) {
|
||||
lam->start = new Marker (*this, *marker_group, color, location->name(), Marker::Mark, location->start());
|
||||
lam->end = 0;
|
||||
|
||||
if (location->is_cd_marker() && ruler_shown[ruler_time_cd_marker]) {
|
||||
lam->start = new Marker (*this, *cd_marker_group, color, location->name(), Marker::Mark, location->start());
|
||||
}
|
||||
else {
|
||||
lam->start = new Marker (*this, *marker_group, color, location->name(), Marker::Mark, location->start());
|
||||
}
|
||||
lam->end = 0;
|
||||
|
||||
} else if (location->is_auto_loop()) {
|
||||
// transport marker
|
||||
lam->start = new Marker (*this, *transport_marker_group, color,
|
||||
|
|
@ -95,12 +102,20 @@ Editor::add_new_location (Location *location)
|
|||
location->name(), Marker::PunchOut, location->end());
|
||||
|
||||
} else {
|
||||
|
||||
// range marker
|
||||
lam->start = new Marker (*this, *range_marker_group, color,
|
||||
location->name(), Marker::Start, location->start());
|
||||
lam->end = new Marker (*this, *range_marker_group, color,
|
||||
location->name(), Marker::End, location->end());
|
||||
if (location->is_cd_marker() && ruler_shown[ruler_time_cd_marker]) {
|
||||
lam->start = new Marker (*this, *cd_marker_group, color,
|
||||
location->name(), Marker::Start, location->start());
|
||||
lam->end = new Marker (*this, *cd_marker_group, color,
|
||||
location->name(), Marker::End, location->end());
|
||||
}
|
||||
else {
|
||||
|
||||
lam->start = new Marker (*this, *range_marker_group, color,
|
||||
location->name(), Marker::Start, location->start());
|
||||
lam->end = new Marker (*this, *range_marker_group, color,
|
||||
location->name(), Marker::End, location->end());
|
||||
}
|
||||
}
|
||||
|
||||
if (location->is_hidden ()) {
|
||||
|
|
@ -121,6 +136,11 @@ Editor::add_new_location (Location *location)
|
|||
newpair.second = lam;
|
||||
|
||||
location_markers.insert (newpair);
|
||||
|
||||
if (select_new_marker && location->is_mark()) {
|
||||
selection->set (lam->start);
|
||||
select_new_marker = false;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -157,6 +177,9 @@ Editor::location_flags_changed (Location *location, void *src)
|
|||
return;
|
||||
}
|
||||
|
||||
// move cd markers to/from cd marker bar as appropriate
|
||||
ensure_cd_marker_updated (lam, location);
|
||||
|
||||
if (location->is_cd_marker()) {
|
||||
lam->set_color_rgba (location_cd_marker_color);
|
||||
} else if (location->is_mark()) {
|
||||
|
|
@ -176,6 +199,52 @@ Editor::location_flags_changed (Location *location, void *src)
|
|||
}
|
||||
}
|
||||
|
||||
void Editor::update_cd_marker_display ()
|
||||
{
|
||||
for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
|
||||
LocationMarkers * lam = i->second;
|
||||
Location * location = i->first;
|
||||
|
||||
ensure_cd_marker_updated (lam, location);
|
||||
}
|
||||
}
|
||||
|
||||
void Editor::ensure_cd_marker_updated (LocationMarkers * lam, Location * location)
|
||||
{
|
||||
if (location->is_cd_marker()
|
||||
&& (ruler_shown[ruler_time_cd_marker] && lam->start->get_parent() != cd_marker_group))
|
||||
{
|
||||
//cerr << "reparenting non-cd marker so it can be relocated: " << location->name() << endl;
|
||||
if (lam->start) {
|
||||
lam->start->reparent (*cd_marker_group);
|
||||
}
|
||||
if (lam->end) {
|
||||
lam->end->reparent (*cd_marker_group);
|
||||
}
|
||||
}
|
||||
else if ( (!location->is_cd_marker() || !ruler_shown[ruler_time_cd_marker])
|
||||
&& (lam->start->get_parent() == cd_marker_group))
|
||||
{
|
||||
//cerr << "reparenting non-cd marker so it can be relocated: " << location->name() << endl;
|
||||
if (location->is_mark()) {
|
||||
if (lam->start) {
|
||||
lam->start->reparent (*marker_group);
|
||||
}
|
||||
if (lam->end) {
|
||||
lam->end->reparent (*marker_group);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (lam->start) {
|
||||
lam->start->reparent (*range_marker_group);
|
||||
}
|
||||
if (lam->end) {
|
||||
lam->end->reparent (*range_marker_group);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Editor::LocationMarkers::~LocationMarkers ()
|
||||
{
|
||||
if (start) {
|
||||
|
|
@ -319,12 +388,14 @@ Editor::LocationMarkers::set_color_rgba (uint32_t rgba)
|
|||
}
|
||||
|
||||
void
|
||||
Editor::mouse_add_new_marker (nframes_t where)
|
||||
Editor::mouse_add_new_marker (nframes_t where, bool is_cd)
|
||||
{
|
||||
string markername;
|
||||
int flags = (is_cd ? Location::IsCDMarker|Location::IsMark : Location::IsMark);
|
||||
|
||||
if (session) {
|
||||
session->locations()->next_available_name(markername,"mark");
|
||||
Location *location = new Location (where, where, markername, Location::IsMark);
|
||||
Location *location = new Location (where, where, markername, (Location::Flags) flags);
|
||||
session->begin_reversible_command (_("add marker"));
|
||||
XMLNode &before = session->locations()->get_state();
|
||||
session->locations()->add (location, true);
|
||||
|
|
@ -353,6 +424,10 @@ Editor::remove_marker (ArdourCanvas::Item& item, GdkEvent* event)
|
|||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
if (entered_marker == marker) {
|
||||
entered_marker = NULL;
|
||||
}
|
||||
|
||||
Location* loc = find_location_from_marker (marker, is_start);
|
||||
|
||||
if (session && loc) {
|
||||
|
|
@ -535,19 +610,21 @@ Editor::build_range_marker_menu (bool loop_or_punch)
|
|||
MenuList& items = markerMenu->items();
|
||||
markerMenu->set_name ("ArdourContextMenu");
|
||||
|
||||
items.push_back (MenuElem (_("Play Range"), mem_fun(*this, &Editor::marker_menu_play_range)));
|
||||
items.push_back (MenuElem (_("Locate to Range Mark"), mem_fun(*this, &Editor::marker_menu_set_playhead)));
|
||||
items.push_back (MenuElem (_("Play from Range Mark"), mem_fun(*this, &Editor::marker_menu_play_from)));
|
||||
if (! loop_or_punch) {
|
||||
items.push_back (MenuElem (_("Play Range"), mem_fun(*this, &Editor::marker_menu_play_range)));
|
||||
items.push_back (MenuElem (_("Loop Range"), mem_fun(*this, &Editor::marker_menu_loop_range)));
|
||||
}
|
||||
items.push_back (MenuElem (_("Set Range Mark from Playhead"), mem_fun(*this, &Editor::marker_menu_set_from_playhead)));
|
||||
items.push_back (MenuElem (_("Set Range from Range Selection"), mem_fun(*this, &Editor::marker_menu_set_from_selection)));
|
||||
if (!Profile->get_sae()) {
|
||||
items.push_back (MenuElem (_("Set Range from Range Selection"), mem_fun(*this, &Editor::marker_menu_set_from_selection)));
|
||||
}
|
||||
|
||||
items.push_back (SeparatorElem());
|
||||
|
||||
items.push_back (MenuElem (_("Hide Range"), mem_fun(*this, &Editor::marker_menu_hide)));
|
||||
if (! loop_or_punch) {
|
||||
items.push_back (MenuElem (_("Hide Range"), mem_fun(*this, &Editor::marker_menu_hide)));
|
||||
items.push_back (MenuElem (_("Rename Range"), mem_fun(*this, &Editor::marker_menu_rename)));
|
||||
items.push_back (MenuElem (_("Remove Range"), mem_fun(*this, &Editor::marker_menu_remove)));
|
||||
}
|
||||
|
|
@ -556,8 +633,9 @@ Editor::build_range_marker_menu (bool loop_or_punch)
|
|||
|
||||
items.push_back (MenuElem (_("Separate Regions in Range"), mem_fun(*this, &Editor::marker_menu_separate_regions_using_location)));
|
||||
items.push_back (MenuElem (_("Select All in Range"), mem_fun(*this, &Editor::marker_menu_select_all_selectables_using_range)));
|
||||
items.push_back (MenuElem (_("Select Range"), mem_fun(*this, &Editor::marker_menu_select_using_range)));
|
||||
|
||||
if (!Profile->get_sae()) {
|
||||
items.push_back (MenuElem (_("Select Range"), mem_fun(*this, &Editor::marker_menu_select_using_range)));
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -736,13 +814,13 @@ Editor::marker_menu_set_from_playhead ()
|
|||
if ((l = find_location_from_marker (marker, is_start)) != 0) {
|
||||
|
||||
if (l->is_mark()) {
|
||||
l->set_start (session->transport_frame ());
|
||||
l->set_start (session->audible_frame ());
|
||||
}
|
||||
else {
|
||||
if (is_start) {
|
||||
l->set_start (session->transport_frame ());
|
||||
l->set_start (session->audible_frame ());
|
||||
} else {
|
||||
l->set_end (session->transport_frame ());
|
||||
l->set_end (session->audible_frame ());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1027,9 +1105,15 @@ Editor::update_punch_range_view (bool visibility)
|
|||
double x1 = frame_to_pixel (tpl->start());
|
||||
double x2 = frame_to_pixel (tpl->end());
|
||||
|
||||
guint track_canvas_width,track_canvas_height;
|
||||
track_canvas.get_size(track_canvas_width,track_canvas_height);
|
||||
|
||||
transport_punch_range_rect->property_x1() = x1;
|
||||
transport_punch_range_rect->property_x2() = x2;
|
||||
|
||||
transport_punch_range_rect->property_x1() = (Config->get_punch_in() ? x1 : 0);
|
||||
transport_punch_range_rect->property_x2() = (Config->get_punch_out() ? x2 : track_canvas_width);
|
||||
|
||||
if (visibility) {
|
||||
transport_punch_range_rect->show();
|
||||
}
|
||||
|
|
@ -1108,3 +1192,33 @@ Editor::selected_marker_moved (Location* loc)
|
|||
{
|
||||
edit_point_clock.set (loc->start());
|
||||
}
|
||||
|
||||
struct SortLocationsByPosition {
|
||||
bool operator() (Location* a, Location* b) {
|
||||
return a->start() < b->start();
|
||||
}
|
||||
};
|
||||
|
||||
void
|
||||
Editor::goto_nth_marker (int n)
|
||||
{
|
||||
if (!session) {
|
||||
return;
|
||||
}
|
||||
const Locations::LocationList& l (session->locations()->list());
|
||||
Locations::LocationList ordered;
|
||||
ordered = l;
|
||||
|
||||
SortLocationsByPosition cmp;
|
||||
ordered.sort (cmp);
|
||||
|
||||
for (Locations::LocationList::iterator i = ordered.begin(); n >= 0 && i != ordered.end(); ++i) {
|
||||
if ((*i)->is_mark() && !(*i)->is_hidden() && !(*i)->is_start()) {
|
||||
if (n == 0) {
|
||||
session->request_locate ((*i)->start(), session->transport_rolling());
|
||||
break;
|
||||
}
|
||||
--n;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue