implement region marker deletion
This commit is contained in:
parent
bd2d8b8c87
commit
60a972a7de
@ -48,6 +48,7 @@
|
||||
#include "gui_thread.h"
|
||||
#include "actions.h"
|
||||
#include "editor_drag.h"
|
||||
#include "region_view.h"
|
||||
|
||||
#include "pbd/i18n.h"
|
||||
|
||||
@ -791,7 +792,21 @@ gint
|
||||
Editor::really_remove_region_marker (ArdourMarker* marker)
|
||||
{
|
||||
begin_reversible_command (_("remove region marker"));
|
||||
cerr << "would remove this region marker\n";
|
||||
RegionView* rv = marker->region_view();
|
||||
|
||||
if (!rv) {
|
||||
abort_reversible_command ();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
CueMarker cm = rv->find_model_cue_marker (marker);
|
||||
if (cm.text().empty()) {
|
||||
abort_reversible_command ();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
rv->region()->remove_cue_marker (cm);
|
||||
|
||||
commit_reversible_command ();
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -71,7 +71,7 @@ void ArdourMarker::setup_sizes(const double timebar_height)
|
||||
}
|
||||
|
||||
ArdourMarker::ArdourMarker (PublicEditor& ed, ArdourCanvas::Container& parent, guint32 rgba, const string& annotation,
|
||||
Type type, samplepos_t sample, bool handle_events)
|
||||
Type type, samplepos_t sample, bool handle_events, RegionView* rv)
|
||||
|
||||
: editor (ed)
|
||||
, _parent (&parent)
|
||||
@ -88,7 +88,7 @@ ArdourMarker::ArdourMarker (PublicEditor& ed, ArdourCanvas::Container& parent, g
|
||||
, _right_label_limit (DBL_MAX)
|
||||
, _label_offset (0)
|
||||
, _line_height (-1)
|
||||
|
||||
, _region_view (rv)
|
||||
{
|
||||
|
||||
const double MH = marker_height - .5;
|
||||
|
@ -41,6 +41,7 @@ namespace ARDOUR {
|
||||
}
|
||||
|
||||
class PublicEditor;
|
||||
class RegionView;
|
||||
|
||||
/** Location Marker
|
||||
*
|
||||
@ -66,7 +67,7 @@ public:
|
||||
|
||||
|
||||
ArdourMarker (PublicEditor& editor, ArdourCanvas::Container &, guint32 rgba, const std::string& text, Type,
|
||||
samplepos_t sample = 0, bool handle_events = true);
|
||||
samplepos_t sample = 0, bool handle_events = true, RegionView* rv = 0);
|
||||
|
||||
virtual ~ArdourMarker ();
|
||||
|
||||
@ -106,6 +107,10 @@ public:
|
||||
|
||||
bool label_on_left () const;
|
||||
|
||||
/* this will be null for all global markers; non-null for region markers */
|
||||
|
||||
RegionView* region_view() const { return _region_view; }
|
||||
|
||||
protected:
|
||||
PublicEditor& editor;
|
||||
|
||||
@ -137,6 +142,8 @@ protected:
|
||||
double _label_offset;
|
||||
double _line_height;
|
||||
|
||||
RegionView* _region_view;
|
||||
|
||||
void reposition ();
|
||||
void setup_line_x ();
|
||||
void setup_name_display ();
|
||||
|
@ -590,7 +590,7 @@ RegionView::update_cue_markers ()
|
||||
|
||||
/* Create a new ViewCueMarker */
|
||||
|
||||
ArdourMarker* mark = new ArdourMarker (trackview.editor(), *group, color , c->text(), ArdourMarker::RegionCue, c->position() - start, true);
|
||||
ArdourMarker* mark = new ArdourMarker (trackview.editor(), *group, color , c->text(), ArdourMarker::RegionCue, c->position() - start, true, this);
|
||||
mark->set_points_color (color);
|
||||
mark->set_show_line (true);
|
||||
/* make sure the line has a clean end, before the frame
|
||||
@ -1204,3 +1204,15 @@ RegionView::maybe_raise_cue_markers ()
|
||||
(*v)->view_marker->the_item().raise_to_top ();
|
||||
}
|
||||
}
|
||||
|
||||
CueMarker
|
||||
RegionView::find_model_cue_marker (ArdourMarker* m)
|
||||
{
|
||||
for (ViewCueMarkers::iterator v = _cue_markers.begin(); v != _cue_markers.end(); ++v) {
|
||||
if ((*v)->view_marker == m) {
|
||||
return (*v)->model_marker;
|
||||
}
|
||||
}
|
||||
|
||||
return CueMarker (string(), 0); /* empty string signifies invalid */
|
||||
}
|
||||
|
@ -133,6 +133,8 @@ public:
|
||||
|
||||
void update_visibility ();
|
||||
|
||||
ARDOUR::CueMarker find_model_cue_marker (ArdourMarker*);
|
||||
|
||||
protected:
|
||||
|
||||
/** Allows derived types to specify their visibility requirements
|
||||
|
@ -375,7 +375,9 @@ public:
|
||||
}
|
||||
|
||||
void get_cue_markers (CueMarkers&, bool abs = false) const;
|
||||
|
||||
void remove_cue_marker (CueMarker&);
|
||||
void clear_cue_markers ();
|
||||
|
||||
protected:
|
||||
virtual XMLNode& state ();
|
||||
|
||||
|
@ -1925,8 +1925,8 @@ void
|
||||
Region::get_cue_markers (CueMarkers& cues, bool abs) const
|
||||
{
|
||||
bool was_empty = cues.empty ();
|
||||
for (SourceList::const_iterator i = _sources.begin (); i != _sources.end(); ++i) {
|
||||
CueMarkers const& x = (*i)->cue_markers ();
|
||||
for (SourceList::const_iterator s = _sources.begin (); s != _sources.end(); ++s) {
|
||||
CueMarkers const& x = (*s)->cue_markers ();
|
||||
for (CueMarkers::const_iterator p = x.begin (); p != x.end (); ++p) {
|
||||
if (abs) {
|
||||
cues.insert (*p);
|
||||
@ -1937,6 +1937,22 @@ Region::get_cue_markers (CueMarkers& cues, bool abs) const
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Region::remove_cue_marker (CueMarker& cm)
|
||||
{
|
||||
for (SourceList::iterator s = _sources.begin (); s != _sources.end(); ++s) {
|
||||
(*s)->remove_cue_marker (cm);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Region::clear_cue_markers ()
|
||||
{
|
||||
for (SourceList::iterator s = _sources.begin (); s != _sources.end(); ++s) {
|
||||
(*s)->clear_cue_markers ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Region::drop_sources ()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user