31 const QList<unsigned int> *tracks)
34 m_length((length || !signal) ? length : signal->length()),
36 m_selection_only((length != 0)),
37 m_lock(QMutex::Recursive)
70 if (tracks && !tracks->isEmpty()) {
72 foreach (
unsigned int track, *tracks) {
79 foreach (
unsigned int track,
m_signal->allTracks()) {
118 if (!action)
return false;
135 QMutexLocker lock(&
m_lock);
140 Q_ASSERT(track || !
m_signal.isNull());
141 if (!track &&
m_signal.isNull())
return;
143 const QUuid &uuid = (track) ? track->
uuid() :
m_signal->uuidOfTrack(index);
144 Q_ASSERT(!uuid.isNull());
162 QMutexLocker lock(&
m_lock);
169 const QUuid &uuid = track->
uuid();
170 Q_ASSERT(!uuid.isNull());
193 QMutexLocker lock(&
m_lock);
198 const QUuid uuid =
m_signal->uuidOfTrack(track);
206 const bool is_first = (uuid ==
m_tracks.first());
237 QMutexLocker lock(&
m_lock);
242 const QUuid uuid =
m_signal->uuidOfTrack(track);
253 const bool is_first = (uuid ==
m_tracks.first());
255 if ((offset + length - 1) <
m_offset) {
273 if (is_first && shift) {
280 if (is_first && deleted_samples) {
294 QMutexLocker lock(&
m_lock);
301 const QUuid uuid =
m_signal->uuidOfTrack(track);
325 QMutexLocker lock(&
m_lock);
328 foreach (
const QUuid &uuid,
m_tracks) {
329 if (!tracks.contains(uuid)) {
336 foreach (
const QUuid &uuid, tracks) {
369 if (offset != old_ofs) {
374 }
else if (length > old_len) {
377 }
else if (length < old_len) {
387 m_tracker(selection),
408 return sizeof(*this);
439 m_tracker->selectRange(tracks, ofs, len);
442 return (with_redo) ? this : Q_NULLPTR;
void sigTrackInserted(const QUuid &uuid)
void selectRange(QList< QUuid > tracks, sample_index_t offset, sample_index_t length)
virtual QString description() Q_DECL_OVERRIDE
sample_index_t offset() const
virtual ~Undo() Q_DECL_OVERRIDE
Kwave::UndoManager & undoManager()
const QUuid & uuid() const
bool registerHandler(Kwave::UndoHandler *handler)
void slotSamplesDeleted(unsigned int track, sample_index_t offset, sample_index_t length)
void slotSamplesModified(unsigned int track, sample_index_t offset, sample_index_t length)
QList< QUuid > allTracks()
void sigInvalidated(const QUuid *track, sample_index_t first, sample_index_t last)
virtual qint64 undoSize() Q_DECL_OVERRIDE
void sigOffsetChanged(sample_index_t offset)
QPointer< Kwave::SignalManager > m_signal
void sigTrackDeleted(const QUuid &uuid)
bool connect(Kwave::StreamObject &source, const char *output, Kwave::StreamObject &sink, const char *input)
QPointer< Kwave::SelectionTracker > m_tracker
virtual ~SelectionTracker() Q_DECL_OVERRIDE
SelectionTracker(Kwave::SignalManager *signal, sample_index_t offset, sample_index_t length, const QList< unsigned int > *tracks)
virtual bool saveUndoData(Kwave::UndoTransaction &undo) Q_DECL_OVERRIDE
void slotTrackDeleted(unsigned int index, Kwave::Track *track)
virtual qint64 redoSize() Q_DECL_OVERRIDE
void slotTrackInserted(unsigned int index, Kwave::Track *track)
void sigLengthChanged(sample_index_t length)
Undo(Kwave::SelectionTracker *selection)
virtual Kwave::UndoAction * undo(Kwave::SignalManager &manager, bool with_redo) Q_DECL_OVERRIDE
bool unregisterHandler(Kwave::UndoHandler *handler)
void slotSamplesInserted(unsigned int track, sample_index_t offset, sample_index_t length)
virtual bool store(Kwave::SignalManager &manager)=0
sample_index_t length() const
virtual bool store(Kwave::SignalManager &manager) Q_DECL_OVERRIDE