kwave  18.07.70
Kwave::CodecManager Class Reference

#include <CodecManager.h>

Inheritance diagram for Kwave::CodecManager:
Inheritance graph
Collaboration diagram for Kwave::CodecManager:
Collaboration graph

Public Member Functions

 CodecManager ()
 
virtual ~CodecManager ()
 

Static Public Member Functions

static void registerEncoder (Kwave::Encoder &encoder)
 
static void unregisterEncoder (Kwave::Encoder *encoder)
 
static void registerDecoder (Kwave::Decoder &decoder)
 
static void unregisterDecoder (Kwave::Decoder *decoder)
 
static bool canDecode (const QString &mimetype_name)
 
static Kwave::Decoderdecoder (const QString &mimetype_name)
 
static Kwave::Encoderencoder (const QString &mimetype_name)
 
static QString encodingFilter ()
 
static QString decodingFilter ()
 
static QString mimeTypeOf (const QUrl &url)
 
static QStringList encodingMimeTypes ()
 

Static Private Attributes

static QList< Kwave::Encoder * > m_encoders
 
static QList< Kwave::Decoder * > m_decoders
 

Detailed Description

Definition at line 35 of file CodecManager.h.

Constructor & Destructor Documentation

◆ CodecManager()

Kwave::CodecManager::CodecManager ( )

Constructor

Definition at line 38 of file CodecManager.cpp.

39 {
40 }

◆ ~CodecManager()

Kwave::CodecManager::~CodecManager ( )
virtual

Destructor

Definition at line 43 of file CodecManager.cpp.

References m_decoders, and m_encoders.

44 {
45  Q_ASSERT(m_encoders.isEmpty());
46  Q_ASSERT(m_decoders.isEmpty());
47 }
static QList< Kwave::Decoder * > m_decoders
Definition: CodecManager.h:125
static QList< Kwave::Encoder * > m_encoders
Definition: CodecManager.h:122

Member Function Documentation

◆ canDecode()

bool Kwave::CodecManager::canDecode ( const QString &  mimetype_name)
static

Returns true if a decoder for the given mime type is known.

Parameters
mimetype_namename of the mime type
Returns
true if format is supported, false if not

Definition at line 78 of file CodecManager.cpp.

References m_decoders, and Kwave::CodecBase::supports().

Referenced by Kwave::FileDrag::canDecode(), Kwave::Drag::canDecode(), Kwave::MimeData::decode(), Kwave::TopWidget::dropEvent(), Kwave::SignalView::dropEvent(), and Kwave::ClipBoard::isEmpty().

79 {
80  foreach (Kwave::Decoder *d, m_decoders)
81  if (d && d->supports(mimetype_name)) return true;
82  return false;
83 }
virtual bool supports(const QMimeType &mimetype)
Definition: CodecBase.cpp:100
static QList< Kwave::Decoder * > m_decoders
Definition: CodecManager.h:125
Here is the call graph for this function:
Here is the caller graph for this function:

◆ decoder()

Kwave::Decoder * Kwave::CodecManager::decoder ( const QString &  mimetype_name)
static

Tries to find a decoder that matches to a given mime type.

Parameters
mimetype_namename of the mime type
Returns
a new decoder for the mime type or null if none found.

Definition at line 121 of file CodecManager.cpp.

References Kwave::Decoder::instance(), m_decoders, and Kwave::CodecBase::supports().

Referenced by Kwave::MimeData::decode(), and Kwave::SignalManager::loadFile().

122 {
123  foreach (Kwave::Decoder *d, m_decoders)
124  if (d && d->supports(mimetype_name)) return d->instance();
125  return Q_NULLPTR;
126 }
virtual bool supports(const QMimeType &mimetype)
Definition: CodecBase.cpp:100
static QList< Kwave::Decoder * > m_decoders
Definition: CodecManager.h:125
virtual Decoder * instance()=0
Here is the call graph for this function:
Here is the caller graph for this function:

◆ decodingFilter()

QString Kwave::CodecManager::decodingFilter ( )
static

Returns a string with a list of all file types that can be used for loading. The string is localized and can be used as a filter for a KFileDialog. The entries are unique (by file extension) but not sorted alphabetically.

Definition at line 171 of file CodecManager.cpp.

References _, DBG, Kwave::CodecBase::MimeType::description, m_decoders, Kwave::CodecBase::mimeTypes(), and Kwave::CodecBase::MimeType::patterns.

Referenced by Kwave::FileDialog::guessFilterFromFileExt(), and Kwave::TopWidget::openFile().

172 {
173  QStringList list;
174  QStringList all_extensions;
175 
176  foreach (Kwave::Decoder *d, m_decoders) {
177  // loop over all mime types that the decoder supports
178  QList<Kwave::CodecBase::MimeType> types = d->mimeTypes();
179  QListIterator<Kwave::CodecBase::MimeType> ti(types);
180  while (ti.hasNext()) {
181  Kwave::CodecBase::MimeType type = ti.next();
182  QString extensions = type.patterns.join(_(" "));
183 
184  // skip if extensions are already known/present
185  if (!list.isEmpty() && list.join(_("\n")).contains(extensions))
186  continue;
187 
188  // otherwise append to the list
189  all_extensions += type.patterns;
190  QString entry = extensions;
191  QString comment =
192  type.description.replace(QRegExp(_("/")), _(","));
193  entry += _("|") + comment;
194  list.append(entry + _(" (") + extensions + _(")"));
195  }
196  }
197 
198  // builtin type for macro files
199  all_extensions += _("*.kwave");
200  list.append(_("*.kwave|") + i18n("Kwave Macro Files") + _(" (*.kwave)"));
201 
202  // special entries for "all" and "all supported"
203  list.sort();
204  list.prepend(_("*|") + i18n("All Files"));
205  list.prepend(all_extensions.join(_(" ")) + _("|") +
206  i18n("All Supported Files"));
207 
208  QString str_list = list.join(_("\n"));
209  Q_ASSERT(!str_list.contains(QLatin1Char('/')));
210  if (str_list.contains(QLatin1Char('/'))) {
211  qWarning("CodecManager::decodingFilter() -> '%s'", DBG(str_list));
212  }
213 
214  return str_list;
215 }
static QList< Kwave::Decoder * > m_decoders
Definition: CodecManager.h:125
virtual const QList< CodecBase::MimeType > mimeTypes()
Definition: CodecBase.cpp:128
#define _(m)
Definition: memcpy.c:66
#define DBG(qs)
Definition: String.h:55
Here is the call graph for this function:
Here is the caller graph for this function:

◆ encoder()

Kwave::Encoder * Kwave::CodecManager::encoder ( const QString &  mimetype_name)
static

Tries to find an encoder that matches to a given mime type.

Parameters
mimetype_namename of the mime type of the destination
Returns
a new encoder for the mime type or null if none found.

Definition at line 129 of file CodecManager.cpp.

References Kwave::Encoder::instance(), m_encoders, and Kwave::CodecBase::supports().

Referenced by Kwave::FileInfoDialog::compressionChanged(), Kwave::MimeData::encode(), Kwave::SignalManager::save(), Kwave::K3BExportPlugin::saveBlocks(), Kwave::FileContext::saveFileAs(), Kwave::FileInfoDialog::setupFileInfoTab(), Kwave::SaveBlocksPlugin::start(), and Kwave::FileInfoDialog::updateAvailableCompressions().

130 {
131  foreach (Kwave::Encoder *e, m_encoders)
132  if (e && e->supports(mimetype_name)) return e->instance();
133  return Q_NULLPTR;
134 }
virtual Encoder * instance()=0
virtual bool supports(const QMimeType &mimetype)
Definition: CodecBase.cpp:100
static QList< Kwave::Encoder * > m_encoders
Definition: CodecManager.h:122
Here is the call graph for this function:
Here is the caller graph for this function:

◆ encodingFilter()

QString Kwave::CodecManager::encodingFilter ( )
static

Returns a string with a list of all file types that can be used for saving. The string is localized and can be used as a filter for a KFileDialog. The entries are unique (by file extension) but not sorted alphabetically.

Definition at line 137 of file CodecManager.cpp.

References _, DBG, Kwave::CodecBase::MimeType::description, m_encoders, Kwave::CodecBase::mimeTypes(), and Kwave::CodecBase::MimeType::patterns.

Referenced by Kwave::FileDialog::guessFilterFromFileExt(), Kwave::FileContext::saveFileAs(), and Kwave::SaveBlocksPlugin::setup().

138 {
139  QStringList list;
140  foreach (Kwave::Encoder *e, m_encoders) {
141  // loop over all mime types that the encoder supports
142  QList<Kwave::CodecBase::MimeType> types = e->mimeTypes();
143  QListIterator<Kwave::CodecBase::MimeType> ti(types);
144  while (ti.hasNext()) {
145  Kwave::CodecBase::MimeType type = ti.next();
146  QString extensions = type.patterns.join(_(" "));
147 
148  // skip if extensions are already known/present
149  if (!list.isEmpty() && list.join(_("\n")).contains(extensions))
150  continue;
151 
152  // otherwise append to the list
153  QString entry = extensions;
154  QString comment = type.description.replace(
155  QRegExp(_("/")), _(","));
156  entry += _("|") + comment;
157  list.append(entry + _(" (") + extensions + _(")"));
158  }
159  }
160  list.sort();
161  QString str_list = list.join(_("\n"));
162  Q_ASSERT(!str_list.contains(QLatin1Char('/')));
163  if (str_list.contains(QLatin1Char('/'))) {
164  qWarning("CodecManager::encodingFilter() -> '%s'", DBG(str_list));
165  }
166 
167  return str_list;
168 }
virtual const QList< CodecBase::MimeType > mimeTypes()
Definition: CodecBase.cpp:128
#define _(m)
Definition: memcpy.c:66
static QList< Kwave::Encoder * > m_encoders
Definition: CodecManager.h:122
#define DBG(qs)
Definition: String.h:55
Here is the call graph for this function:
Here is the caller graph for this function:

◆ encodingMimeTypes()

QStringList Kwave::CodecManager::encodingMimeTypes ( )
static

Returns a list of supported mime types for encoding

Definition at line 106 of file CodecManager.cpp.

References m_encoders, Kwave::CodecBase::mimeTypes(), Kwave::CodecBase::MimeType::name, and name.

Referenced by Kwave::FileInfoDialog::compressionChanged(), and Kwave::FileInfoDialog::updateAvailableCompressions().

107 {
108  QStringList list;
109  foreach (Kwave::Encoder *e, m_encoders) {
110  if (!e) continue;
111  foreach (const Kwave::CodecBase::MimeType &mime_type, e->mimeTypes()) {
112  QString name = mime_type.name;
113  if (list.isEmpty() || !list.contains(name))
114  list.append(name);
115  }
116  }
117  return list;
118 }
const char name[16]
Definition: memcpy.c:510
virtual const QList< CodecBase::MimeType > mimeTypes()
Definition: CodecBase.cpp:128
static QList< Kwave::Encoder * > m_encoders
Definition: CodecManager.h:122
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mimeTypeOf()

QString Kwave::CodecManager::mimeTypeOf ( const QUrl &  url)
static

Tries to find the name of a mime type of a decoder by a URL. If not found, it returns the default mime type, never an empty string.

Parameters
urla QUrl, only the filename's extension will be inspected
Returns
name of the mime type or the default mime type

Definition at line 86 of file CodecManager.cpp.

References m_decoders, m_encoders, and Kwave::CodecBase::mimeTypeOf().

Referenced by Kwave::FileDrag::canDecode(), Kwave::TopWidget::dropEvent(), Kwave::SignalView::dropEvent(), Kwave::SignalManager::loadFile(), Kwave::SignalManager::save(), Kwave::K3BExportPlugin::saveBlocks(), Kwave::FileContext::saveFileAs(), Kwave::FileInfoDialog::setupFileInfoTab(), and Kwave::SaveBlocksPlugin::start().

87 {
88  const QString default_mime_type = QMimeType().name();
89 
90  foreach (Kwave::Decoder *d, m_decoders) {
91  if (!d) continue;
92  QString mime_type = d->mimeTypeOf(url);
93  if (mime_type != default_mime_type) return mime_type;
94  }
95  foreach (Kwave::Encoder *e, m_encoders) {
96  if (!e) continue;
97  QString mime_type = e->mimeTypeOf(url);
98  if (mime_type != default_mime_type) return mime_type;
99  }
100 
101  QMimeDatabase db;
102  return db.mimeTypeForUrl(url).name();
103 }
virtual QString mimeTypeOf(const QUrl &url)
Definition: CodecBase.cpp:140
static QList< Kwave::Decoder * > m_decoders
Definition: CodecManager.h:125
static QList< Kwave::Encoder * > m_encoders
Definition: CodecManager.h:122
Here is the call graph for this function:
Here is the caller graph for this function:

◆ registerDecoder()

void Kwave::CodecManager::registerDecoder ( Kwave::Decoder decoder)
static

Registers a new decoder.

Parameters
decodera KwaveDecoder that will be used as template for creating new decoder instances (used as factory)

Definition at line 64 of file CodecManager.cpp.

References m_decoders.

Referenced by Kwave::CodecPlugin::load().

65 {
66  if (m_decoders.contains(&decoder)) return; /* already known */
67  m_decoders.append(&decoder);
68 }
static QList< Kwave::Decoder * > m_decoders
Definition: CodecManager.h:125
Here is the caller graph for this function:

◆ registerEncoder()

void Kwave::CodecManager::registerEncoder ( Kwave::Encoder encoder)
static

Registers a new encoder.

Parameters
encodera KwaveEncoder that will be used as template for creating new encoder instances (used as factory)

Definition at line 50 of file CodecManager.cpp.

References m_encoders.

Referenced by Kwave::CodecPlugin::load().

51 {
52  if (m_encoders.contains(&encoder)) return; /* already known */
53  m_encoders.append(&encoder);
54 }
static QList< Kwave::Encoder * > m_encoders
Definition: CodecManager.h:122
Here is the caller graph for this function:

◆ unregisterDecoder()

void Kwave::CodecManager::unregisterDecoder ( Kwave::Decoder decoder)
static

Un-registers an decoder previously registered with registerDecoder.

Parameters
decodera KwaveDecoder

Definition at line 71 of file CodecManager.cpp.

References m_decoders.

Referenced by Kwave::CodecPlugin::unload().

72 {
73  if (!m_decoders.contains(decoder)) return; /* unknown */
74  m_decoders.removeAll(decoder);
75 }
static QList< Kwave::Decoder * > m_decoders
Definition: CodecManager.h:125
Here is the caller graph for this function:

◆ unregisterEncoder()

void Kwave::CodecManager::unregisterEncoder ( Kwave::Encoder encoder)
static

Un-registers an encoder previously registered with registerEncoder.

Parameters
encodera KwaveEncoder

Definition at line 57 of file CodecManager.cpp.

References m_encoders.

Referenced by Kwave::CodecPlugin::unload().

58 {
59  if (!m_encoders.contains(encoder)) return; /* unknown */
60  m_encoders.removeAll(encoder);
61 }
static QList< Kwave::Encoder * > m_encoders
Definition: CodecManager.h:122
Here is the caller graph for this function:

Member Data Documentation

◆ m_decoders

QList< Kwave::Decoder * > Kwave::CodecManager::m_decoders
staticprivate

list of decoders

Definition at line 125 of file CodecManager.h.

Referenced by canDecode(), decoder(), decodingFilter(), mimeTypeOf(), registerDecoder(), unregisterDecoder(), and ~CodecManager().

◆ m_encoders

QList< Kwave::Encoder * > Kwave::CodecManager::m_encoders
staticprivate

list of all encoders

Definition at line 122 of file CodecManager.h.

Referenced by encoder(), encodingFilter(), encodingMimeTypes(), mimeTypeOf(), registerEncoder(), unregisterEncoder(), and ~CodecManager().


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