diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-04-21 19:45:51 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-04-21 19:45:51 +0000 |
| commit | 3995fa88592e1b0ed2c35c42940b5af3be954819 (patch) | |
| tree | be4f5e68a4c5684f9d5c862074814f0a5fed318d /src/plugins/Input/modplug/decodermodplugfactory.cpp | |
| parent | 1ebcb405edc1e0341adb8f134215a5be1e45aef6 (diff) | |
| download | qmmp-3995fa88592e1b0ed2c35c42940b5af3be954819.tar.gz qmmp-3995fa88592e1b0ed2c35c42940b5af3be954819.tar.bz2 qmmp-3995fa88592e1b0ed2c35c42940b5af3be954819.zip | |
added modplug plugin
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@348 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Input/modplug/decodermodplugfactory.cpp')
| -rw-r--r-- | src/plugins/Input/modplug/decodermodplugfactory.cpp | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/src/plugins/Input/modplug/decodermodplugfactory.cpp b/src/plugins/Input/modplug/decodermodplugfactory.cpp new file mode 100644 index 000000000..147244839 --- /dev/null +++ b/src/plugins/Input/modplug/decodermodplugfactory.cpp @@ -0,0 +1,169 @@ +#include <QtGui> + +#include <libmodplug/stdafx.h> +#include <libmodplug/it_defs.h> +#include <libmodplug/sndfile.h> + +#include "settingsdialog.h" +#include "detailsdialog.h" +#include "decoder_modplug.h" +#include "archivereader.h" +#include "decodermodplugfactory.h" + + +// DecoderModPlugFactory + +bool DecoderModPlugFactory::supports(const QString &source) const +{ + QString lExt = source.section(".",-1).toLower(); + lExt.prepend("."); + if (lExt == ".xm") + return TRUE; + if (lExt == ".amf") + return TRUE; + if (lExt == ".ams") + return TRUE; + if (lExt == ".dbm") + return TRUE; + if (lExt == ".dbf") + return TRUE; + if (lExt == ".dsm") + return TRUE; + if (lExt == ".far") + return TRUE; + if (lExt == ".mdl") + return TRUE; + if (lExt == ".stm") + return TRUE; + if (lExt == ".ult") + return TRUE; + if (lExt == ".j2b") + return TRUE; + if (lExt == ".mt2") + return TRUE; + if (lExt == ".mdz") + return TRUE; + /*if (lExt == ".mdr") + return TRUE;*/ + if (lExt == ".mdgz") + return TRUE; + if (lExt == ".mdbz") + return TRUE; + if (lExt == ".s3z") + return TRUE; + /*if (lExt == ".s3r") + return TRUE;*/ + if (lExt == ".s3gz") + return TRUE; + if (lExt == ".xmz") + return TRUE; + /*if (lExt == ".xmr") + return TRUE;*/ + if (lExt == ".xmgz") + return TRUE; + if (lExt == ".itz") + return TRUE; + /*if (lExt == ".itr") + return TRUE;*/ + if (lExt == ".itgz") + return TRUE; + if (lExt == ".dmf") + return TRUE; + return FALSE; +} + +bool DecoderModPlugFactory::canDecode(QIODevice *) const +{ + return FALSE; +} + +const DecoderProperties DecoderModPlugFactory::properties() const +{ + DecoderProperties properties; + properties.name = tr("ModPlug Plugin"); + properties.filter = (QString) "*.amf *.ams *.dbm *.dbf *.dsm *.far *.mdl *.stm *.ult" + + "*.j2b *.mt2 *.mdz *.mdr *.mdgz *.mdbz *.mod *.s3z *.s3r *.s3gz *.s3m *.xmz"+ + "*.xmr *.xmgz *.itz *.itr *.itgz *.dmf *.umx *.it *.669 *.xm *.mtm *.psm *.ft2"; + properties.description = tr("ModPlug Files"); + //properties.contentType = ; + properties.hasAbout = TRUE; + properties.hasSettings = TRUE; + return properties; +} + +Decoder *DecoderModPlugFactory::create(QObject *parent, QIODevice *input, + Output *output) +{ + return new DecoderModPlug(parent, this, input, output); +} + +FileTag *DecoderModPlugFactory::createTag(const QString &source) +{ + FileTag *ftag = new FileTag(); + QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); + if(settings.value("UseFileName", FALSE).toBool()) + { + ftag->setValue(FileTag::TITLE, source.section('/',-1)); + return ftag; + } + ArchiveReader reader(this); + QByteArray buffer; + if(reader.isSupported(source)) + { + buffer = reader.unpack(source); + } + else + { + QFile file(source); + if(!file.open(QIODevice::ReadOnly)) + { + qWarning("DecoderModPlugFactory: error: %s", qPrintable(file.errorString ())); + return ftag; + } + buffer = file.readAll(); + file.close(); + } + CSoundFile* soundFile = new CSoundFile(); + soundFile->Create((uchar*) buffer.data(), buffer.size()); + + ftag->setValue(FileTag::LENGTH, (int) soundFile->GetSongTime()); + ftag->setValue(FileTag::TITLE, QString::fromUtf8(soundFile->GetTitle())); + soundFile->Destroy(); + delete soundFile; + return ftag; +} + +QObject* DecoderModPlugFactory::showDetails(QWidget *parent, const QString &path) +{ + DetailsDialog *d = new DetailsDialog(parent, path); + d -> show(); + return d; +} + +void DecoderModPlugFactory::showSettings(QWidget *parent) +{ + SettingsDialog *d = new SettingsDialog(parent); + d->show(); +} + +void DecoderModPlugFactory::showAbout(QWidget *parent) +{ + QMessageBox::about (parent, tr("About ModPlug Audio Plugin"), + tr("Qmmp ModPlug Audio Plugin")+"\n"+ + tr("Writen by: Ilya Kotov <forkotov02@hotmail.ru>")+"\n"+ + tr("Based on the Modplug Plugin for Xmms")+"\n"+ + tr("Modplug Plugin developers:")+"\n"+ + tr("Olivier Lapicque <olivierl@jps.net>")+"\n"+ + tr("Kenton Varda <temporal@gauge3d.org>")+"\n"+ + tr("Konstanty Bialkowski <konstanty@ieee.org>")); +} + +QTranslator *DecoderModPlugFactory::createTranslator(QObject *parent) +{ + QTranslator *translator = new QTranslator(parent); + QString locale = QLocale::system().name(); + translator->load(QString(":/modplug_plugin_") + locale); + return translator; +} + +Q_EXPORT_PLUGIN(DecoderModPlugFactory) |
