kwave  18.07.70
Kwave::FilterPlugin Class Referenceabstract

#include <FilterPlugin.h>

Inheritance diagram for Kwave::FilterPlugin:
Inheritance graph
Collaboration diagram for Kwave::FilterPlugin:
Collaboration graph

Signals

void sigCancelPressed ()
 
- Signals inherited from Kwave::Plugin
void sigRunning (Kwave::Plugin *plugin)
 
void sigDone (Kwave::Plugin *plugin)
 
void sigClosed (Kwave::Plugin *p)
 
void sigCommand (const QString &command)
 
void setProgressText (const QString &text)
 

Public Member Functions

 FilterPlugin (QObject *parent, const QVariantList &args)
 
virtual ~FilterPlugin () Q_DECL_OVERRIDE
 
virtual int interpreteParameters (QStringList &)=0
 
virtual Kwave::PluginSetupDialogcreateDialog (QWidget *)=0
 
virtual Kwave::SampleSourcecreateFilter (unsigned int tracks)=0
 
virtual QStringList * setup (QStringList &previous_params) Q_DECL_OVERRIDE
 
virtual void run (QStringList params) Q_DECL_OVERRIDE
 
virtual bool paramsChanged ()
 
virtual void updateFilter (Kwave::SampleSource *filter, bool force=false)
 
virtual QString actionName ()=0
 
virtual QString progressText () Q_DECL_OVERRIDE
 
- Public Member Functions inherited from Kwave::Plugin
 Plugin (QObject *parent, const QVariantList &args)
 
virtual ~Plugin () Q_DECL_OVERRIDE
 
virtual QString name () const
 
virtual QString description () const
 
virtual bool canClose () const
 
bool isRunning () const
 
bool shouldStop () const
 
virtual void load (QStringList &params)
 
virtual void unload ()
 
virtual int start (QStringList &params)
 
virtual int stop ()
 
Kwave::PluginManagermanager () const
 
Kwave::SignalManagersignalManager ()
 
QWidget * parentWidget () const
 
QString signalName ()
 
virtual sample_index_t signalLength ()
 
virtual double signalRate ()
 
virtual const QList< unsigned int > selectedTracks ()
 
virtual sample_index_t selection (QList< unsigned int > *tracks=Q_NULLPTR, sample_index_t *left=Q_NULLPTR, sample_index_t *right=Q_NULLPTR, bool expand_if_empty=false)
 
virtual void selectRange (sample_index_t offset, sample_index_t length)
 
virtual void migrateToActiveContext ()
 
- Public Member Functions inherited from Kwave::Runnable
virtual ~Runnable ()
 

Protected Slots

void startPreListen ()
 
void stopPreListen ()
 

Private Attributes

QStringList m_params
 
bool m_listen
 
bool m_pause
 
Kwave::SampleSinkm_sink
 

Additional Inherited Members

- Public Slots inherited from Kwave::Plugin
virtual void setProgressDialogEnabled (bool enable)
 
virtual void updateProgress (qreal progress)
 
virtual void cancel ()
 
virtual void close ()
 
void release ()
 
- Protected Member Functions inherited from Kwave::Plugin
int execute (QStringList &params)
 
void emitCommand (const QString &command)
 
void use ()
 
void setPluginManager (Kwave::PluginManager *new_plugin_manager)
 
virtual void run_wrapper (const QVariant &params) Q_DECL_OVERRIDE
 

Detailed Description

Definition at line 39 of file FilterPlugin.h.

Constructor & Destructor Documentation

◆ FilterPlugin()

Kwave::FilterPlugin::FilterPlugin ( QObject *  parent,
const QVariantList &  args 
)

Constructor

Parameters
parentpointer to the corresponding plugin manager
argsargument list, containts internal meta data

Definition at line 41 of file FilterPlugin.cpp.

42  :Kwave::Plugin(parent, args),
43  m_params(), m_listen(false), m_pause(false), m_sink(Q_NULLPTR)
44 {
45 }
Kwave::SampleSink * m_sink
Definition: FilterPlugin.h:141
QStringList m_params
Definition: FilterPlugin.h:129

◆ ~FilterPlugin()

Kwave::FilterPlugin::~FilterPlugin ( )
virtual

Destructor

Definition at line 48 of file FilterPlugin.cpp.

49 {
50 }

Member Function Documentation

◆ actionName()

virtual QString Kwave::FilterPlugin::actionName ( )
pure virtual

Returns a verbose name of the performed action. Used for giving the undo action a readable name. The name must already be localized !

Implemented in Kwave::LowPassPlugin, Kwave::NotchFilterPlugin, Kwave::PitchShiftPlugin, Kwave::BandPassPlugin, and Kwave::NoisePlugin.

Referenced by progressText(), and run().

Here is the caller graph for this function:

◆ createDialog()

virtual Kwave::PluginSetupDialog* Kwave::FilterPlugin::createDialog ( QWidget *  )
pure virtual

Creates a setup dialog an returns a pointer to it.

Implemented in Kwave::LowPassPlugin, Kwave::NotchFilterPlugin, Kwave::PitchShiftPlugin, Kwave::BandPassPlugin, and Kwave::NoisePlugin.

Referenced by setup().

Here is the caller graph for this function:

◆ createFilter()

virtual Kwave::SampleSource* Kwave::FilterPlugin::createFilter ( unsigned int  tracks)
pure virtual

Creates a multi-track filter with the given number of tracks

Parameters
tracksnumber of tracks that the filter should have
Returns
pointer to the filter or null if failed

Implemented in Kwave::LowPassPlugin, Kwave::NotchFilterPlugin, Kwave::PitchShiftPlugin, Kwave::BandPassPlugin, and Kwave::NoisePlugin.

Referenced by run().

Here is the caller graph for this function:

◆ interpreteParameters()

virtual int Kwave::FilterPlugin::interpreteParameters ( QStringList &  )
pure virtual

Reads values from the parameter list

Implemented in Kwave::LowPassPlugin, Kwave::NotchFilterPlugin, Kwave::PitchShiftPlugin, Kwave::BandPassPlugin, and Kwave::NoisePlugin.

Referenced by run(), and setup().

Here is the caller graph for this function:

◆ paramsChanged()

bool Kwave::FilterPlugin::paramsChanged ( )
virtual

Returns true if the parameters have changed during pre-listen.

Note
this default implementation always returns false.

Reimplemented in Kwave::LowPassPlugin, Kwave::NotchFilterPlugin, Kwave::PitchShiftPlugin, Kwave::BandPassPlugin, and Kwave::NoisePlugin.

Definition at line 192 of file FilterPlugin.cpp.

Referenced by run().

193 {
194  return false;
195 }
Here is the caller graph for this function:

◆ progressText()

QString Kwave::FilterPlugin::progressText ( )
virtual

Returns a text for the progress dialog if enabled. (should already be localized)

Reimplemented from Kwave::Plugin.

Definition at line 228 of file FilterPlugin.cpp.

References actionName().

229 {
230  return i18n("Applying '%1'...", actionName());
231 }
virtual QString actionName()=0
Here is the call graph for this function:

◆ run()

void Kwave::FilterPlugin::run ( QStringList  params)
virtual

Does the filter operation and/or pre-listen

Parameters
paramslist of strings with parameters

Reimplemented from Kwave::Plugin.

Definition at line 91 of file FilterPlugin.cpp.

References actionName(), Kwave::connect(), createFilter(), Kwave::SampleSink::done(), Kwave::MultiTrackSource< SOURCE, INITIALIZE >::done(), Kwave::FullSnapshot, Kwave::SampleSource::goOn(), Kwave::MultiTrackSource< SOURCE, INITIALIZE >::goOn(), interpreteParameters(), m_listen, m_params, m_pause, m_sink, Kwave::Overwrite, paramsChanged(), Kwave::MultiTrackReader::reset(), Kwave::Plugin::selection(), Kwave::StreamObject::setInteractive(), Kwave::Plugin::shouldStop(), Kwave::Plugin::signalManager(), Kwave::SinglePassForward, updateFilter(), and Kwave::Plugin::updateProgress().

92 {
93  Kwave::UndoTransactionGuard *undo_guard = Q_NULLPTR;
94  m_pause = false;
95 
96  if (!interpreteParameters(params)) m_params = params;
97 
98  sample_index_t first, last;
99  QList<unsigned int> tracks;
100  selection(&tracks, &first, &last, true);
101 
102  // switch to interactive mode in pre-listen mode
104 
105  // create all objects
108  signalManager(), tracks, first, last);
109 
110  Kwave::SampleSource *filter = createFilter(tracks.count());
111  Q_ASSERT(filter);
112 
113  if (m_listen) {
114  // pre-listen mode
115  Q_ASSERT(m_sink);
116  } else {
117  // normal mode, with undo
118  undo_guard = new(std::nothrow)
120  Q_ASSERT(undo_guard);
121  if (!undo_guard) {
122  if (filter) delete filter;
124  return;
125  }
126  m_sink = new(std::nothrow) MultiTrackWriter(signalManager(), tracks,
127  Kwave::Overwrite, first, last);
128  Q_ASSERT(m_sink);
129  }
130  if (!filter || !m_sink || m_sink->done()) {
131  if (filter) delete filter;
132  if (undo_guard) delete undo_guard;
133  if (m_sink) delete m_sink;
134  m_sink = Q_NULLPTR;
136  return;
137  }
138 
139  // set up the progress dialog when in processing (not pre-listen) mode
140  if (!m_listen) {
141  connect(&source, SIGNAL(progress(qreal)),
142  this, SLOT(updateProgress(qreal)),
143  Qt::BlockingQueuedConnection);
144  }
145 
146  // force initial update of the filter settings
147  updateFilter(filter, true);
148 
149  // connect them
150  Kwave::connect(source, SIGNAL(output(Kwave::SampleArray)),
151  *filter, SLOT(input(Kwave::SampleArray)));
152  Kwave::connect(*filter, SIGNAL(output(Kwave::SampleArray)),
153  *m_sink, SLOT(input(Kwave::SampleArray)));
154 
155  // transport the samples
156  while (!shouldStop() && (!source.done() || m_listen)) {
157  // process one step
158  source.goOn();
159  filter->goOn();
160 
161  // watch out for changed parameters when in
162  // pre-listen mode
163  if (m_listen && paramsChanged()) {
164  updateFilter(filter);
165  }
166 
167  if (m_listen && source.done()) {
168  // start the next loop
169  source.reset();
170  continue;
171  }
172 
173  // this lets the process wait if the user pressed cancel
174  // and the confirm_cancel dialog is active
175  while (m_pause && !shouldStop())
176  sleep(1);
177  }
178 
179  // cleanup
180  if (filter) delete filter;
181  if (m_sink) delete m_sink;
182  m_sink = Q_NULLPTR;
183  if (undo_guard) delete undo_guard;
184 
185  m_pause = false;
186  m_listen = false;
187 
189 }
virtual void goOn()=0
Kwave::SignalManager & signalManager()
Definition: Plugin.cpp:444
virtual int interpreteParameters(QStringList &)=0
static void setInteractive(bool interactive)
quint64 sample_index_t
Definition: Sample.h:28
bool connect(Kwave::StreamObject &source, const char *output, Kwave::StreamObject &sink, const char *input)
Definition: Connect.cpp:48
virtual Kwave::SampleSource * createFilter(unsigned int tracks)=0
virtual bool paramsChanged()
virtual QString actionName()=0
virtual void updateFilter(Kwave::SampleSource *filter, bool force=false)
Kwave::SampleSink * m_sink
Definition: FilterPlugin.h:141
virtual bool done() const
Definition: SampleSink.h:52
virtual void updateProgress(qreal progress)
Definition: Plugin.cpp:260
bool shouldStop() const
Definition: Plugin.h:120
QStringList m_params
Definition: FilterPlugin.h:129
virtual sample_index_t selection(QList< unsigned int > *tracks=Q_NULLPTR, sample_index_t *left=Q_NULLPTR, sample_index_t *right=Q_NULLPTR, bool expand_if_empty=false)
Definition: Plugin.cpp:480
Here is the call graph for this function:

◆ setup()

QStringList * Kwave::FilterPlugin::setup ( QStringList &  previous_params)
virtual

Shows a dialog for setting up the filter plugin

See also
Kwave::Plugin::setup

Reimplemented from Kwave::Plugin.

Definition at line 53 of file FilterPlugin.cpp.

References Kwave::connect(), createDialog(), Kwave::PluginSetupDialog::dialog(), interpreteParameters(), m_params, Kwave::PluginSetupDialog::params(), Kwave::Plugin::parentWidget(), Kwave::PluginSetupDialog::setParams(), Kwave::Plugin::sigDone(), startPreListen(), and stopPreListen().

54 {
55  // try to interpret and use the previous parameters
56  if (!interpreteParameters(previous_params))
57  m_params = previous_params;
58 
59  // create the setup dialog
61  Q_ASSERT(setup_dialog);
62  if (!setup_dialog) return Q_NULLPTR;
63 
64  // connect the signals for the pre-listen handling
65  QDialog *dlg = setup_dialog->dialog();
66  connect(dlg, SIGNAL(startPreListen()),
67  this, SLOT(startPreListen()));
68  connect(dlg, SIGNAL(stopPreListen()),
69  this, SLOT(stopPreListen()));
70  connect(this, SIGNAL(sigDone(Kwave::Plugin*)),
71  dlg, SLOT(listenStopped()));
72 
73  if (!m_params.isEmpty()) setup_dialog->setParams(m_params);
74 
75  QStringList *list = new QStringList();
76  Q_ASSERT(list);
77  if (list && dlg->exec()) {
78  // user has pressed "OK"
79  *list = setup_dialog->params();
80  } else {
81  // user pressed "Cancel"
82  if (list) delete list;
83  list = Q_NULLPTR;
84  }
85 
86  if (setup_dialog) delete setup_dialog;
87  return list;
88 }
virtual void setParams(QStringList &params)=0
QWidget * parentWidget() const
Definition: Plugin.cpp:450
virtual int interpreteParameters(QStringList &)=0
virtual QDialog * dialog()=0
bool connect(Kwave::StreamObject &source, const char *output, Kwave::StreamObject &sink, const char *input)
Definition: Connect.cpp:48
void sigDone(Kwave::Plugin *plugin)
virtual Kwave::PluginSetupDialog * createDialog(QWidget *)=0
virtual QStringList params()=0
QStringList m_params
Definition: FilterPlugin.h:129
Here is the call graph for this function:

◆ sigCancelPressed

void Kwave::FilterPlugin::sigCancelPressed ( )
signal

emitted when the user pressed the cancel button of the progress dialog

◆ startPreListen

void Kwave::FilterPlugin::startPreListen ( )
protectedslot

Start the pre-listening

Definition at line 205 of file FilterPlugin.cpp.

References Kwave::Plugin::execute(), m_listen, m_sink, Kwave::Plugin::manager(), Kwave::PluginManager::openMultiTrackPlayback(), Kwave::Plugin::selectedTracks(), and Kwave::Plugin::setProgressDialogEnabled().

Referenced by setup().

206 {
207  Q_ASSERT(!m_sink);
208  if (m_sink) delete m_sink;
210 
211  if (m_sink) {
212  m_listen = true;
214  static QStringList empty_list;
215  execute(empty_list);
216  }
217 }
Kwave::SampleSink * openMultiTrackPlayback(unsigned int tracks, const Kwave::PlayBackParam *playback_params=Q_NULLPTR)
Kwave::PluginManager & manager() const
Definition: Plugin.cpp:437
virtual void setProgressDialogEnabled(bool enable)
Definition: Plugin.cpp:254
int execute(QStringList &params)
Definition: Plugin.cpp:331
Kwave::SampleSink * m_sink
Definition: FilterPlugin.h:141
virtual const QList< unsigned int > selectedTracks()
Definition: Plugin.cpp:474
Here is the call graph for this function:
Here is the caller graph for this function:

◆ stopPreListen

void Kwave::FilterPlugin::stopPreListen ( )
protectedslot

Stop the pre-listening

Definition at line 220 of file FilterPlugin.cpp.

References m_listen, Kwave::Plugin::setProgressDialogEnabled(), and Kwave::Plugin::stop().

Referenced by setup().

221 {
222  stop();
223  m_listen = false;
225 }
virtual int stop()
Definition: Plugin.cpp:214
virtual void setProgressDialogEnabled(bool enable)
Definition: Plugin.cpp:254
Here is the call graph for this function:
Here is the caller graph for this function:

◆ updateFilter()

void Kwave::FilterPlugin::updateFilter ( Kwave::SampleSource filter,
bool  force = false 
)
virtual

Update the filter with new parameters if it has changed changed during the pre-listen.

Parameters
filterthe Kwave::SampleSource to be updated, should be the same one as created with createFilter()
forceif true, even update if no settings have changed

Reimplemented in Kwave::LowPassPlugin, Kwave::NotchFilterPlugin, Kwave::PitchShiftPlugin, Kwave::BandPassPlugin, and Kwave::NoisePlugin.

Definition at line 198 of file FilterPlugin.cpp.

Referenced by run().

200 {
201  /* default implementation, does nothing */
202 }
Here is the caller graph for this function:

Member Data Documentation

◆ m_listen

bool Kwave::FilterPlugin::m_listen
private

flag for indicating pre-listen mode

Definition at line 132 of file FilterPlugin.h.

Referenced by run(), startPreListen(), and stopPreListen().

◆ m_params

QStringList Kwave::FilterPlugin::m_params
private

List of parameters

Definition at line 129 of file FilterPlugin.h.

Referenced by run(), and setup().

◆ m_pause

bool Kwave::FilterPlugin::m_pause
private

flag for pausing the process

Definition at line 135 of file FilterPlugin.h.

Referenced by run().

◆ m_sink

Kwave::SampleSink* Kwave::FilterPlugin::m_sink
private

a sample sink, used either for pre-listen or for normal processing

Definition at line 141 of file FilterPlugin.h.

Referenced by run(), and startPreListen().


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