libardour: small changes to cue marker API to return bool from Source modification methods

This commit is contained in:
Paul Davis 2021-05-27 09:01:33 -06:00
parent 1a1e67f595
commit ca44f54ed6
2 changed files with 34 additions and 11 deletions

View file

@ -113,10 +113,10 @@ public:
void set_captured_xruns (XrunPositions const& xruns) { _xruns = xruns; }
CueMarkers const & cue_markers() const { return _cue_markers; }
void add_cue_marker (CueMarker const &);
void move_cue_marker (CueMarker const &, samplepos_t source_relative_position);
bool add_cue_marker (CueMarker const &);
bool move_cue_marker (CueMarker const &, samplepos_t source_relative_position);
bool remove_cue_marker (CueMarker const &);
void rename_cue_marker (CueMarker&, std::string const &);
bool rename_cue_marker (CueMarker&, std::string const &);
bool clear_cue_markers ();
PBD::Signal0<void> CueMarkersChanged;

View file

@ -215,6 +215,8 @@ Source::set_state (const XMLNode& node, int version)
} else if ((*niter)->name() == X_("Cues")) {
CueMarkers old (_cue_markers);
_cue_markers.clear ();
const XMLNode& cues (*(*niter));
@ -230,6 +232,9 @@ Source::set_state (const XMLNode& node, int version)
_cue_markers.insert (CueMarker (text, position));
}
cues_changed = (old == _cue_markers);
cerr << "reset state, cues changed " << cues_changed << endl;
}
}
@ -257,6 +262,16 @@ Source::set_state (const XMLNode& node, int version)
_flags = Flag (_flags & ~(Writable|Removable|RemovableIfEmpty|RemoveAtDestroy|CanRename));
}
/* support to make undo/redo actually function. Very few things about
* Sources are ever part of undo/redo history, but this can
* be. Undo/Redo uses a MementoCommand<> pattern, which will not in
* itself notify anyone when the operation changes the cue markers.
*/
if (cues_changed) {
CueMarkersChanged (); /* EMIT SIGNAL */
}
return 0;
}
@ -413,34 +428,42 @@ Source::writable () const
return (_flags & Writable) && _session.writable();
}
void
bool
Source::add_cue_marker (CueMarker const & cm)
{
_cue_markers.insert (cm);
CueMarkersChanged(); /* EMIT SIGNAL */
if (_cue_markers.insert (cm).second) {
CueMarkersChanged(); /* EMIT SIGNAL */
return true;
}
return false;
}
void
bool
Source::move_cue_marker (CueMarker const & cm, samplepos_t source_relative_position)
{
if (source_relative_position > length (0)) {
return;
return false;
}
if (remove_cue_marker (cm)) {
add_cue_marker (CueMarker (cm.text(), source_relative_position));
return add_cue_marker (CueMarker (cm.text(), source_relative_position));
}
return false;
}
void
bool
Source::rename_cue_marker (CueMarker& cm, std::string const & str)
{
CueMarkers::iterator m = _cue_markers.find (cm);
if (m != _cue_markers.end()) {
_cue_markers.erase (m);
add_cue_marker (CueMarker (str, cm.position()));
return add_cue_marker (CueMarker (str, cm.position()));
}
return false;
}
bool