kwave  18.07.70
Kwave::MultiTrackWriter Class Reference

#include <MultiTrackWriter.h>

Inheritance diagram for Kwave::MultiTrackWriter:
Inheritance graph
Collaboration diagram for Kwave::MultiTrackWriter:
Collaboration graph

Public Member Functions

 MultiTrackWriter (Kwave::SignalManager &signal_manager, const QList< unsigned int > &track_list, Kwave::InsertMode mode, sample_index_t left, sample_index_t right)
 
 MultiTrackWriter (Kwave::SignalManager &signal_manager, Kwave::InsertMode mode)
 
virtual ~MultiTrackWriter ()
 
- Public Member Functions inherited from Kwave::MultiWriter
 MultiWriter ()
 
virtual ~MultiWriter () Q_DECL_OVERRIDE
 
virtual sample_index_t last () const
 
virtual void flush ()
 
virtual void clear () Q_DECL_OVERRIDE
 
virtual bool insert (unsigned int track, Kwave::Writer *writer) Q_DECL_OVERRIDE
 
bool isCanceled () const
 
- Public Member Functions inherited from Kwave::MultiTrackSink< Kwave::Writer, false >
 MultiTrackSink (unsigned int tracks, QObject *parent=Q_NULLPTR)
 
virtual ~MultiTrackSink () Q_DECL_OVERRIDE
 
virtual bool done () const Q_DECL_OVERRIDE
 
virtual unsigned int tracks () const Q_DECL_OVERRIDE
 
virtual Kwave::Writerat (unsigned int track) const
 
virtual Kwave::Writeroperator[] (unsigned int track) Q_DECL_OVERRIDE
 
- Public Member Functions inherited from Kwave::SampleSink
 SampleSink (QObject *parent=Q_NULLPTR)
 
virtual ~SampleSink ()
 
- Public Member Functions inherited from Kwave::StreamObject
 StreamObject (QObject *parent=Q_NULLPTR)
 
virtual ~StreamObject ()
 
virtual unsigned int tracksOfPort (const char *port) const
 
virtual Kwave::StreamObjectport (const char *port, unsigned int track)
 
virtual unsigned int blockSize () const
 
void setAttribute (const char *attribute, const QVariant &value)
 

Private Member Functions

 MultiTrackWriter ()
 
bool init (Kwave::SignalManager &signal_manager, const QList< unsigned int > &track_list, Kwave::InsertMode mode, sample_index_t left, sample_index_t right)
 

Additional Inherited Members

- Public Slots inherited from Kwave::MultiWriter
void cancel ()
 
- Signals inherited from Kwave::MultiWriter
void progress (qreal percent)
 
void written (quint64 samples)
 
- Signals inherited from Kwave::StreamObject
void attributeChanged (const QVariant value)
 
- Static Public Member Functions inherited from Kwave::StreamObject
static void setInteractive (bool interactive)
 
- Protected Attributes inherited from Kwave::MultiWriter
bool m_canceled
 

Detailed Description

A MultiTrackWriter encapsulates a set of TrackWriters for easier use of multi-track signals.

Definition at line 40 of file MultiTrackWriter.h.

Constructor & Destructor Documentation

◆ MultiTrackWriter() [1/3]

Kwave::MultiTrackWriter::MultiTrackWriter ( )
private

Default constructor

Definition at line 31 of file MultiTrackWriter.cpp.

◆ MultiTrackWriter() [2/3]

Kwave::MultiTrackWriter::MultiTrackWriter ( Kwave::SignalManager signal_manager,
const QList< unsigned int > &  track_list,
Kwave::InsertMode  mode,
sample_index_t  left,
sample_index_t  right 
)

Constructor

Parameters
signal_managerreference to a SignalManager
track_listlist of track indices
modespecifies where and how to insert
leftindex of the first sample
rightindex of the last sample

Definition at line 37 of file MultiTrackWriter.cpp.

References init().

43 {
44  if (!init(signal_manager, track_list, mode, left, right)) {
45  // out of memory or aborted
46  qWarning("MultiTrackWriter::init FAILED");
47  }
48 }
bool init(Kwave::SignalManager &signal_manager, const QList< unsigned int > &track_list, Kwave::InsertMode mode, sample_index_t left, sample_index_t right)
Here is the call graph for this function:

◆ MultiTrackWriter() [3/3]

Kwave::MultiTrackWriter::MultiTrackWriter ( Kwave::SignalManager signal_manager,
Kwave::InsertMode  mode 
)

Constructor that opens a set of Writers using the currently selected list of tracks and the current selection. If nothing is selected, the whole signal will be selected.

Parameters
signal_managerreference to a SignalManager
modespecifies where and how to insert

Definition at line 51 of file MultiTrackWriter.cpp.

References Kwave::Selection::first(), init(), Kwave::Selection::last(), Kwave::SignalManager::length(), Kwave::SignalManager::selectedTracks(), and Kwave::SignalManager::selection().

54 {
55  QList<unsigned int> track_list = signal_manager.selectedTracks();
56  sample_index_t left = 0;
57  sample_index_t right = 0;
58 
59  if (signal_manager.length()) {
60  // default if signal is present: current selection
61  left = signal_manager.selection().first();
62  right = signal_manager.selection().last();
63  if (left == right) {
64  // if no selection: whole signal
65  left = 0;
66  right = signal_manager.length() - 1;
67  }
68  }
69 
70  if (!init(signal_manager, track_list, mode, left, right)) {
71  // out of memory or aborted
72  qWarning("MultiTrackWriter::init FAILED");
73  }
74 }
sample_index_t first() const
Definition: Selection.h:71
sample_index_t last() const
Definition: Selection.h:76
Kwave::Selection & selection()
quint64 sample_index_t
Definition: Sample.h:28
sample_index_t length()
bool init(Kwave::SignalManager &signal_manager, const QList< unsigned int > &track_list, Kwave::InsertMode mode, sample_index_t left, sample_index_t right)
const QList< unsigned int > selectedTracks()
Here is the call graph for this function:

◆ ~MultiTrackWriter()

Kwave::MultiTrackWriter::~MultiTrackWriter ( )
virtual

Destructor

Definition at line 77 of file MultiTrackWriter.cpp.

References Kwave::MultiWriter::clear(), and Kwave::MultiWriter::flush().

78 {
79  flush();
80  clear();
81 }
virtual void flush()
virtual void clear() Q_DECL_OVERRIDE
Definition: MultiWriter.cpp:97
Here is the call graph for this function:

Member Function Documentation

◆ init()

bool Kwave::MultiTrackWriter::init ( Kwave::SignalManager signal_manager,
const QList< unsigned int > &  track_list,
Kwave::InsertMode  mode,
sample_index_t  left,
sample_index_t  right 
)
private

Intializer, see constructor...

Parameters
signal_managerreference to a SignalManager
track_listarray of indices of tracks for reading
modespecifies where and how to insert
leftindex of the first sample
rightindex of the last sample

Definition at line 84 of file MultiTrackWriter.cpp.

References Kwave::Append, Kwave::MultiTrackSink< Kwave::Writer, false >::at(), Kwave::MultiWriter::clear(), Kwave::connect(), Kwave::Writer::first(), Kwave::Insert, Kwave::MultiWriter::insert(), Kwave::Writer::last(), Kwave::SignalManager::openWriter(), Kwave::Overwrite, Kwave::SignalManager::parentWidget(), Kwave::SignalManager::registerUndoAction(), Kwave::SignalManager::startUndoTransaction(), Kwave::MultiTrackSink< Kwave::Writer, false >::tracks(), and Kwave::SignalManager::undoEnabled().

Referenced by MultiTrackWriter().

89 {
90  Kwave::UndoTransactionGuard guard(signal_manager, QString());
91 
92  unsigned int index = 0;
93  foreach (unsigned int track, track_list) {
94  // NOTE: this function is *nearly* identical to the one in the
95  // Signal class, except for undo support
96  Kwave::Writer *writer = signal_manager.openWriter(
97  mode, track, left, right);
98  if (writer) {
99  insert(index++, writer);
100 
101  // get the real/effective left and right sample
102  left = writer->first();
103  right = writer->last();
104  } else {
105  // out of memory or aborted
106  clear();
107  return false;
108  }
109  }
110 
111  // skip all that undo handling below if undo is not enabled
112  // or the writer creation has failed
113  if (!signal_manager.undoEnabled()) return true;
114 
115  // enter a new undo transaction and let it close when the writer closes
116  signal_manager.startUndoTransaction();
117  QObject::connect(this, SIGNAL(destroyed()),
118  &signal_manager, SLOT(closeUndoTransaction()),
119  Qt::QueuedConnection);
120 
121  // create an undo action for the modification of the samples
122  UndoAction *undo = Q_NULLPTR;
123  switch (mode) {
124  case Kwave::Append:
125  case Kwave::Insert: {
126  undo = new(std::nothrow) Kwave::UndoInsertAction(
127  signal_manager.parentWidget(),
128  track_list,
129  left,
130  right - left + 1
131  );
132 
133  if (undo) {
134  Kwave::Writer *last_writer = at(tracks() - 1);
136  last_writer,
137  SIGNAL(sigSamplesWritten(sample_index_t)),
138  static_cast<Kwave::UndoInsertAction *>(undo),
139  SLOT(setLength(sample_index_t)));
140  }
141  break;
142  }
143  case Kwave::Overwrite: {
144  foreach (unsigned int track, track_list) {
145  undo = new(std::nothrow) Kwave::UndoModifyAction(
146  track, left, right - left + 1);
147  if (!signal_manager.registerUndoAction(undo)) {
148  // aborted, do not continue without undo
149  clear();
150  return false;
151  }
152  }
153  break;
154  }
155  }
156 
157  if ( (mode != Kwave::Overwrite) &&
158  !signal_manager.registerUndoAction(undo) )
159  {
160  // aborted, do not continue without undo
161  clear();
162  return false;
163  }
164 
165  // Everything was ok, the action now is owned by the current undo
166  // transaction. The transaction is owned by the SignalManager and
167  // will be closed when the writer gets closed.
168  return true;
169 }
QWidget * parentWidget() const
virtual unsigned int tracks() const Q_DECL_OVERRIDE
Kwave::Writer * openWriter(Kwave::InsertMode mode, unsigned int track, sample_index_t left=0, sample_index_t right=0)
virtual bool insert(unsigned int track, Kwave::Writer *writer) Q_DECL_OVERRIDE
Definition: MultiWriter.cpp:37
quint64 sample_index_t
Definition: Sample.h:28
bool registerUndoAction(Kwave::UndoAction *action)
bool connect(Kwave::StreamObject &source, const char *output, Kwave::StreamObject &sink, const char *input)
Definition: Connect.cpp:48
void startUndoTransaction(const QString &name=QString())
sample_index_t last() const
Definition: Writer.h:114
bool undoEnabled() const
sample_index_t first() const
Definition: Writer.h:108
virtual void clear() Q_DECL_OVERRIDE
Definition: MultiWriter.cpp:97
virtual Kwave::Writer * at(unsigned int track) const
Here is the call graph for this function:
Here is the caller graph for this function:

The documentation for this class was generated from the following files: