kwave  18.07.70
Plugin.h
Go to the documentation of this file.
1 /***************************************************************************
2  Plugin.h - base class of all Kwave plugins
3  -------------------
4  begin : Thu Jul 27 2000
5  copyright : (C) 2000 by Thomas Eschenbacher
6  email : Thomas.Eschenbacher@gmx.de
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef PLUGIN_H
19 #define PLUGIN_H
20 
21 #include "config.h"
22 
23 #include <QAtomicInt>
24 #include <QtGlobal>
25 #include <QList>
26 #include <QMutex>
27 #include <QObject>
28 #include <QString>
29 #include <QThread>
30 #include <QTimer>
31 #include <QVariantList>
32 
33 #include <KPluginFactory>
34 
35 #include "libkwave/Runnable.h"
36 #include "libkwave/Sample.h"
37 #include "libkwave/String.h"
38 
39 class QProgressDialog;
40 class QStringList;
41 class QVariant;
42 
43 /* forward declarations, to make clang happy */
44 Q_EXTERN_C Q_DECL_EXPORT const char *qt_plugin_query_metadata();
45 Q_EXTERN_C Q_DECL_EXPORT QT_PREPEND_NAMESPACE(QObject) *qt_plugin_instance();
46 
54 #define KWAVE_PLUGIN(name,class) \
55  K_PLUGIN_FACTORY_WITH_JSON(kwaveplugin_##name##_factory, \
56  "kwaveplugin_"#name".json", \
57  registerPlugin<Kwave::class>();)
58 
59 namespace Kwave
60 {
61 
62  class ConfirmCancelProxy;
63  class PluginManager;
64  class SampleReader;
65  class SignalManager;
66  class TopWidget;
67  class WorkerThread;
68 
75  class Q_DECL_EXPORT Plugin: public QObject, public Kwave::Runnable
76  {
77  Q_OBJECT
78 
79  public:
80 
86  Plugin(QObject *parent, const QVariantList &args);
87 
91  virtual ~Plugin() Q_DECL_OVERRIDE;
92 
94  virtual QString name() const;
95 
97  virtual QString description() const;
98 
103  virtual QString progressText();
104 
109  virtual bool canClose() const;
110 
114  bool isRunning() const;
115 
120  bool shouldStop() const { return m_stop; }
121 
128  virtual void load(QStringList &params);
129 
134  virtual void unload();
135 
148  virtual QStringList *setup(QStringList &previous_params);
149 
158  virtual int start(QStringList &params);
159 
164  virtual int stop();
165 
173  virtual void run(QStringList params);
174 
178  Kwave::PluginManager &manager() const;
179 
181  Kwave::SignalManager &signalManager();
182 
187  QWidget *parentWidget() const;
188 
194  QString signalName();
195 
200  virtual sample_index_t signalLength();
201 
206  virtual double signalRate();
207 
211  virtual const QList<unsigned int> selectedTracks();
212 
230  virtual sample_index_t selection(
231  QList<unsigned int> *tracks = Q_NULLPTR,
232  sample_index_t *left = Q_NULLPTR,
233  sample_index_t *right = Q_NULLPTR,
234  bool expand_if_empty = false);
235 
241  virtual void selectRange(sample_index_t offset, sample_index_t length);
242 
250  virtual void migrateToActiveContext();
251 
252  protected:
253 
254  friend class Kwave::PluginManager;
255 
262  int execute(QStringList &params);
263 
265  void emitCommand(const QString &command);
266 
268  void use();
269 
271  void setPluginManager(Kwave::PluginManager *new_plugin_manager);
272 
273  signals:
274 
279  void sigRunning(Kwave::Plugin *plugin);
280 
285  void sigDone(Kwave::Plugin *plugin);
286 
288  void sigClosed(Kwave::Plugin *p);
289 
291  void sigCommand(const QString &command);
292 
297  void setProgressText(const QString &text);
298 
299  public slots:
300 
304  virtual void setProgressDialogEnabled(bool enable);
305 
310  virtual void updateProgress(qreal progress);
311 
317  virtual void cancel();
318 
324  virtual void close();
325 
327  void release();
328 
329  private slots:
330 
332  void closeProgressDialog(Kwave::Plugin *);
333 
335  void updateProgressTick();
336 
337  protected:
338 
339  friend class Kwave::WorkerThread;
340 
342  virtual void run_wrapper(const QVariant &params) Q_DECL_OVERRIDE;
343 
344  private:
345 
348 
350  QString m_name;
351 
353  QString m_description;
354 
359 
362 
365 
367  QAtomicInt m_stop;
368 
370  QProgressDialog *m_progress;
371 
377 
379  unsigned int m_usage_count;
380 
382  QMutex m_usage_lock;
383 
386 
389 
392 
393  };
394 
395 }
396 
397 #endif /* PLUGIN_H */
398 
399 //***************************************************************************
400 //***************************************************************************
void sigCommand(const QString &command)
QAtomicInt m_stop
Definition: Plugin.h:367
Definition: App.h:33
unsigned int m_usage_count
Definition: Plugin.h:379
Kwave::WorkerThread * m_thread
Definition: Plugin.h:358
QProgressDialog * m_progress
Definition: Plugin.h:370
Q_EXTERN_C Q_DECL_EXPORT const char * qt_plugin_query_metadata()
QTimer m_progress_timer
Definition: Plugin.h:385
QString m_name
Definition: Plugin.h:350
quint64 sample_index_t
Definition: Sample.h:28
QMutex m_usage_lock
Definition: Plugin.h:382
const char name[16]
Definition: memcpy.c:510
Q_EXTERN_C Q_DECL_EXPORT QT_PREPEND_NAMESPACE(QObject) *qt_plugin_instance()
QMutex m_thread_lock
Definition: Plugin.h:361
QString m_description
Definition: Plugin.h:353
bool m_progress_enabled
Definition: Plugin.h:364
Kwave::PluginManager * m_plugin_manager
Definition: Plugin.h:347
QMutex m_progress_lock
Definition: Plugin.h:391
bool shouldStop() const
Definition: Plugin.h:120
Kwave::ConfirmCancelProxy * m_confirm_cancel
Definition: Plugin.h:376
qreal m_current_progress
Definition: Plugin.h:388