@@ -58,6 +58,12 @@ public:
|
||||
|
||||
virtual ~DataFile();
|
||||
|
||||
///
|
||||
/// \brief validate
|
||||
/// performs basic validation, compared to file extension.
|
||||
///
|
||||
bool validate( QString extension );
|
||||
|
||||
QString nameWithExtension( const QString& fn ) const;
|
||||
|
||||
void write( QTextStream& strm );
|
||||
|
||||
@@ -35,7 +35,7 @@ class PreviewTrackContainer;
|
||||
class EXPORT PresetPreviewPlayHandle : public PlayHandle
|
||||
{
|
||||
public:
|
||||
PresetPreviewPlayHandle( const QString& presetFile, bool loadByPlugin = false );
|
||||
PresetPreviewPlayHandle( const QString& presetFile, bool loadByPlugin = false, DataFile *dataFile = 0 );
|
||||
virtual ~PresetPreviewPlayHandle();
|
||||
|
||||
virtual void play( sampleFrame* buffer );
|
||||
|
||||
@@ -163,6 +163,53 @@ DataFile::~DataFile()
|
||||
|
||||
|
||||
|
||||
bool DataFile::validate( QString extension )
|
||||
{
|
||||
switch( m_type )
|
||||
{
|
||||
case Type::SongProject:
|
||||
if( extension == "mmp" || extension == "mmpz" )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case Type::SongProjectTemplate:
|
||||
if( extension == "mpt" )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case Type::InstrumentTrackSettings:
|
||||
if ( extension == "xpf" || extension == "xml" )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case Type::UnknownType:
|
||||
if (! ( extension == "mmp" || extension == "mpt" || extension == "mmpz" ||
|
||||
extension == "xpf" || extension == "xml" ||
|
||||
( extension == "xiz" && Engine::pluginFileHandling().contains( extension ) ) ||
|
||||
extension == "sf2" || extension == "pat" || extension == "mid" ||
|
||||
extension == "flp" || extension == "dll"
|
||||
) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if( extension == "wav" || extension == "ogg" ||
|
||||
extension == "ds" )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
QString DataFile::nameWithExtension( const QString & _fn ) const
|
||||
{
|
||||
switch( type() )
|
||||
|
||||
@@ -111,7 +111,7 @@ PreviewTrackContainer * PresetPreviewPlayHandle::s_previewTC;
|
||||
|
||||
|
||||
|
||||
PresetPreviewPlayHandle::PresetPreviewPlayHandle( const QString & _preset_file, bool _load_by_plugin ) :
|
||||
PresetPreviewPlayHandle::PresetPreviewPlayHandle( const QString & _preset_file, bool _load_by_plugin, DataFile *dataFile ) :
|
||||
PlayHandle( TypePresetPreviewHandle ),
|
||||
m_previewNote( NULL )
|
||||
{
|
||||
@@ -144,22 +144,32 @@ PresetPreviewPlayHandle::PresetPreviewPlayHandle( const QString & _preset_file,
|
||||
}
|
||||
else
|
||||
{
|
||||
DataFile dataFile( _preset_file );
|
||||
bool dataFileCreated = false;
|
||||
if( dataFile == 0 )
|
||||
{
|
||||
dataFile = new DataFile( _preset_file );
|
||||
dataFileCreated = true;
|
||||
}
|
||||
|
||||
// vestige previews are bug prone; fallback on 3xosc with volume of 0
|
||||
// without an instrument in preview track, it will segfault
|
||||
if(dataFile.content().elementsByTagName( "vestige" ).length() == 0 )
|
||||
if(dataFile->content().elementsByTagName( "vestige" ).length() == 0 )
|
||||
{
|
||||
s_previewTC->previewInstrumentTrack()->
|
||||
loadTrackSpecificSettings(
|
||||
dataFile.content().firstChild().toElement() );
|
||||
dataFile->content().firstChild().toElement() );
|
||||
}
|
||||
else
|
||||
{
|
||||
s_previewTC->previewInstrumentTrack()->loadInstrument("tripleoscillator");
|
||||
s_previewTC->previewInstrumentTrack()->setVolume( 0 );
|
||||
}
|
||||
if( dataFileCreated )
|
||||
{
|
||||
delete dataFile;
|
||||
}
|
||||
}
|
||||
|
||||
dataFile = 0;
|
||||
// make sure, our preset-preview-track does not appear in any MIDI-
|
||||
// devices list, so just disable receiving/sending MIDI-events at all
|
||||
s_previewTC->previewInstrumentTrack()->
|
||||
|
||||
@@ -942,7 +942,7 @@ void Song::loadProject( const QString & fileName )
|
||||
DataFile dataFile( m_fileName );
|
||||
// if file could not be opened, head-node is null and we create
|
||||
// new project
|
||||
if( dataFile.head().isNull() )
|
||||
if( dataFile.validate( fileName.right( fileName.lastIndexOf(".") ) ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include <QPushButton>
|
||||
#include <QMdiArea>
|
||||
#include <QMdiSubWindow>
|
||||
#include <QMessageBox>
|
||||
|
||||
#include "FileBrowser.h"
|
||||
#include "BBTrackContainer.h"
|
||||
@@ -461,7 +462,17 @@ void FileBrowserTreeWidget::mousePressEvent(QMouseEvent * me )
|
||||
( f->handling() == FileItem::LoadAsPreset ||
|
||||
f->handling() == FileItem::LoadByPlugin ) )
|
||||
{
|
||||
m_previewPlayHandle = new PresetPreviewPlayHandle( f->fullName(), f->handling() == FileItem::LoadByPlugin );
|
||||
DataFile dataFile( f->fullName() );
|
||||
if( !dataFile.validate( f->extension() ) )
|
||||
{
|
||||
QMessageBox::warning( 0, tr ( "Error" ),
|
||||
f->fullName() + " " + tr( "does not appear to be a valid" ) + " " + f->extension() +
|
||||
" " + tr( "file" ),
|
||||
QMessageBox::Ok, QMessageBox::NoButton );
|
||||
m_pphMutex.unlock();
|
||||
return;
|
||||
}
|
||||
m_previewPlayHandle = new PresetPreviewPlayHandle( f->fullName(), f->handling() == FileItem::LoadByPlugin, &dataFile );
|
||||
}
|
||||
if( m_previewPlayHandle != NULL )
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user