kwave  18.07.70
Kwave::UndoDeleteAction Class Reference

#include <UndoDeleteAction.h>

Inheritance diagram for Kwave::UndoDeleteAction:
Inheritance graph
Collaboration diagram for Kwave::UndoDeleteAction:
Collaboration graph

Public Member Functions

 UndoDeleteAction (QWidget *parent_widget, const QList< unsigned int > &track_list, sample_index_t offset, sample_index_t length)
 
virtual ~UndoDeleteAction () Q_DECL_OVERRIDE
 
virtual QString description () Q_DECL_OVERRIDE
 
virtual qint64 undoSize () Q_DECL_OVERRIDE
 
virtual qint64 redoSize () Q_DECL_OVERRIDE
 
virtual bool store (Kwave::SignalManager &manager) Q_DECL_OVERRIDE
 
virtual Kwave::UndoActionundo (Kwave::SignalManager &manager, bool with_redo) Q_DECL_OVERRIDE
 
virtual void dump (const QString &indent) Q_DECL_OVERRIDE
 
- Public Member Functions inherited from Kwave::UndoAction
virtual ~UndoAction ()
 
virtual bool containsModification () const
 

Private Attributes

QWidget * m_parent_widget
 
QList< Kwave::Stripe::Listm_stripes
 
Kwave::MetaDataList m_meta_data
 
QList< unsigned int > m_track_list
 
sample_index_t m_offset
 
sample_index_t m_length
 
unsigned int m_undo_size
 

Detailed Description

Definition at line 38 of file UndoDeleteAction.h.

Constructor & Destructor Documentation

◆ UndoDeleteAction()

Kwave::UndoDeleteAction::UndoDeleteAction ( QWidget *  parent_widget,
const QList< unsigned int > &  track_list,
sample_index_t  offset,
sample_index_t  length 
)

Constructor.

Parameters
parent_widgetthe widget used as parent for displaying error messages
track_listlist of affected tracks
offsetindex of the first deleted sample
lengthnumber of samples to delete

Definition at line 32 of file UndoDeleteAction.cpp.

References m_length, m_track_list, and m_undo_size.

37  m_parent_widget(parent_widget),
39  m_track_list(track_list),
40  m_offset(offset), m_length(length),
41  m_undo_size(sizeof(*this))
42 {
43  // undo size needed for samples
44  m_undo_size += m_length * sizeof(sample_t) * m_track_list.count();
45 }
Kwave::MetaDataList m_meta_data
QList< Kwave::Stripe::List > m_stripes
QList< unsigned int > m_track_list
qint32 sample_t
Definition: Sample.h:37

◆ ~UndoDeleteAction()

Kwave::UndoDeleteAction::~UndoDeleteAction ( )
virtual

Destructor

Definition at line 48 of file UndoDeleteAction.cpp.

References m_stripes.

49 {
50  m_stripes.clear();
51 }
QList< Kwave::Stripe::List > m_stripes

Member Function Documentation

◆ description()

QString Kwave::UndoDeleteAction::description ( )
virtual
See also
UndoAction::description()

Implements Kwave::UndoAction.

Definition at line 54 of file UndoDeleteAction.cpp.

55 {
56  return i18n("Delete");
57 }

◆ dump()

void Kwave::UndoDeleteAction::dump ( const QString &  indent)
virtual

dump, for debugging purposes

Reimplemented from Kwave::UndoAction.

Definition at line 129 of file UndoDeleteAction.cpp.

References DBG, m_length, and m_offset.

130 {
131  qDebug("%sundo delete from [%lu ... %lu] (%lu)", DBG(indent),
132  static_cast<unsigned long int>(m_offset),
133  static_cast<unsigned long int>(m_offset + ((m_length) ?
134  (m_length - 1) : m_length)),
135  static_cast<unsigned long int>(m_length));
136 }
#define DBG(qs)
Definition: String.h:55

◆ redoSize()

qint64 Kwave::UndoDeleteAction::redoSize ( )
virtual
See also
UndoAction::redoSize()

Implements Kwave::UndoAction.

Definition at line 66 of file UndoDeleteAction.cpp.

67 {
68  return sizeof(Kwave::UndoInsertAction);
69 }

◆ store()

bool Kwave::UndoDeleteAction::store ( Kwave::SignalManager manager)
virtual

Stores the data needed for undo.

Parameters
managerthe SignalManager for modifying the signal
Note
this is the second step, after size() has been called
Returns
true if successful, false if failed (e.g. out of memory)

Implements Kwave::UndoAction.

Definition at line 72 of file UndoDeleteAction.cpp.

References Kwave::MetaDataList::copy(), m_length, m_meta_data, m_offset, m_stripes, m_track_list, Kwave::SignalManager::metaData(), and Kwave::SignalManager::stripes().

73 {
74  if (!m_length) return true; // shortcut: this is an empty action
75 
76  // fork off a multi track stripe list for the selected range
77  const sample_index_t left = m_offset;
78  const sample_index_t right = m_offset + m_length - 1;
79  m_stripes = manager.stripes(m_track_list, left, right);
80  if (m_stripes.isEmpty())
81  return false; // retrieving the stripes failed
82 
83  // save the meta data
84  m_meta_data = manager.metaData().copy(m_offset, m_length, m_track_list);
85 
86  return true;
87 }
Kwave::MetaDataList m_meta_data
virtual MetaDataList copy(sample_index_t offset, sample_index_t length, const QList< unsigned int > &tracks) const
Kwave::MetaDataList & metaData()
quint64 sample_index_t
Definition: Sample.h:28
QList< Kwave::Stripe::List > m_stripes
QList< unsigned int > m_track_list
QList< Kwave::Stripe::List > stripes(const QList< unsigned int > &track_list, sample_index_t left=0, sample_index_t right=SAMPLE_INDEX_MAX)
Here is the call graph for this function:

◆ undo()

Kwave::UndoAction * Kwave::UndoDeleteAction::undo ( Kwave::SignalManager manager,
bool  with_redo 
)
virtual

Copies the samples to be deleted to the internal buffer.

See also
UndoAction::undo()

Implements Kwave::UndoAction.

Definition at line 90 of file UndoDeleteAction.cpp.

References Kwave::SignalManager::insertSpace(), m_length, m_meta_data, m_offset, m_parent_widget, m_stripes, m_track_list, Kwave::MetaDataList::merge(), Kwave::SignalManager::mergeStripes(), Kwave::SignalManager::metaData(), and Kwave::UndoAction::store().

92 {
93  Kwave::UndoAction *redo_action = Q_NULLPTR;
94 
95  // store data for redo
96  if (with_redo) {
97  redo_action = new(std::nothrow) Kwave::UndoInsertAction(
100  );
101  Q_ASSERT(redo_action);
102  if (!redo_action) return Q_NULLPTR;
103  redo_action->store(manager);
104  }
105 
106  if (!m_length) return redo_action; // shortcut: this is an empty action
107 
108  // insert space for the stripes
109  if (!manager.insertSpace(m_offset, m_length, m_track_list)) {
110  qWarning("UndoDeleteAction::undo() FAILED [insertSpace]");
111  delete redo_action;
112  return Q_NULLPTR;
113  }
114 
115  // merge the stripes back into the signal
116  if (!manager.mergeStripes(m_stripes, m_track_list)) {
117  qWarning("UndoDeleteAction::undo() FAILED [mergeStripes]");
118  delete redo_action;
119  return Q_NULLPTR;
120  }
121 
122  // restore the saved meta data
123  manager.metaData().merge(m_meta_data);
124 
125  return redo_action;
126 }
Kwave::MetaDataList m_meta_data
bool insertSpace(sample_index_t offset, sample_index_t length, const QList< unsigned int > &track_list)
Kwave::MetaDataList & metaData()
void merge(const MetaDataList &meta_data)
QList< Kwave::Stripe::List > m_stripes
QList< unsigned int > m_track_list
virtual bool store(Kwave::SignalManager &manager)=0
bool mergeStripes(const QList< Kwave::Stripe::List > &stripes, const QList< unsigned int > &track_list)
Here is the call graph for this function:

◆ undoSize()

qint64 Kwave::UndoDeleteAction::undoSize ( )
virtual
See also
UndoAction::undoSize()

Implements Kwave::UndoAction.

Definition at line 60 of file UndoDeleteAction.cpp.

References m_undo_size.

61 {
62  return m_undo_size;
63 }

Member Data Documentation

◆ m_length

sample_index_t Kwave::UndoDeleteAction::m_length
private

number of deleted samples

Definition at line 102 of file UndoDeleteAction.h.

Referenced by dump(), store(), undo(), and UndoDeleteAction().

◆ m_meta_data

Kwave::MetaDataList Kwave::UndoDeleteAction::m_meta_data
private

storage for the affected meta data items

Definition at line 93 of file UndoDeleteAction.h.

Referenced by store(), and undo().

◆ m_offset

sample_index_t Kwave::UndoDeleteAction::m_offset
private

first deleted sample

Definition at line 99 of file UndoDeleteAction.h.

Referenced by dump(), store(), and undo().

◆ m_parent_widget

QWidget* Kwave::UndoDeleteAction::m_parent_widget
private

parent widget for showing error messages

Definition at line 87 of file UndoDeleteAction.h.

Referenced by undo().

◆ m_stripes

QList<Kwave::Stripe::List> Kwave::UndoDeleteAction::m_stripes
private

storage for all deleted stripes

Definition at line 90 of file UndoDeleteAction.h.

Referenced by store(), undo(), and ~UndoDeleteAction().

◆ m_track_list

QList<unsigned int> Kwave::UndoDeleteAction::m_track_list
private

list of affected tracks

Definition at line 96 of file UndoDeleteAction.h.

Referenced by store(), undo(), and UndoDeleteAction().

◆ m_undo_size

unsigned int Kwave::UndoDeleteAction::m_undo_size
private

memory needed for undo

Definition at line 105 of file UndoDeleteAction.h.

Referenced by UndoDeleteAction(), and undoSize().


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