* improved concept for file types supported by certain plugins

* various small improvements for an even better ZynAddSubFX integration



git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@1520 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
Tobias Doerffel
2008-08-30 00:07:02 +00:00
parent 5d6cfc01f8
commit 9b47d27f56
34 changed files with 150 additions and 101 deletions

View File

@@ -173,19 +173,14 @@ void engine::loadExtensions( void )
pluginDescriptors.begin();
it != pluginDescriptors.end(); ++it )
{
if( it->sub_plugin_features )
if( it->type == plugin::Instrument )
{
if( it->type == plugin::Instrument )
{
const QStringList & ext =
it->sub_plugin_features
->supportedExtensions();
for( QStringList::const_iterator itExt =
ext.begin();
const QStringList & ext =
QString( it->supportedFileTypes ).split( ',' );
for( QStringList::const_iterator itExt = ext.begin();
itExt != ext.end(); ++itExt )
{
s_sampleExtensions[*itExt] = it->name;
}
{
s_sampleExtensions[*itExt] = it->name;
}
}
}

View File

@@ -26,7 +26,7 @@
*/
#include <QtCore/QMutex>
#include <QtCore/QFileInfo>
#include <QtCore/QMutexLocker>
#include "preset_preview_play_handle.h"
@@ -104,8 +104,8 @@ previewTrackContainer * presetPreviewPlayHandle::s_previewTC;
presetPreviewPlayHandle::presetPreviewPlayHandle(
const QString & _preset_file ) :
presetPreviewPlayHandle::presetPreviewPlayHandle( const QString & _preset_file,
bool _special_preset ) :
playHandle( PresetPreviewHandle ),
m_previewNote( NULL )
{
@@ -120,9 +120,30 @@ presetPreviewPlayHandle::presetPreviewPlayHandle(
const bool j = engine::getProjectJournal()->isJournalling();
engine::getProjectJournal()->setJournalling( FALSE );
multimediaProject mmp( _preset_file );
s_previewTC->previewInstrumentTrack()->loadTrackSpecificSettings(
if( _special_preset )
{
instrument * i = s_previewTC->previewInstrumentTrack()->
getInstrument();
const QString ext = QFileInfo( _preset_file ).
suffix().toLower();
if( i == NULL || !i->getDescriptor()->supportsFileType( ext ) )
{
i = s_previewTC->previewInstrumentTrack()->
loadInstrument(
engine::sampleExtensions()[ext] );
}
if( i != NULL )
{
i->setParameter( "samplefile", _preset_file );
}
}
else
{
multimediaProject mmp( _preset_file );
s_previewTC->previewInstrumentTrack()->
loadTrackSpecificSettings(
mmp.content().firstChild().toElement() );
}
// make sure, our preset-preview-track does not appear in any MIDI-
// devices list, so just disable receiving/sending MIDI-events at all

View File

@@ -211,7 +211,8 @@ void listView::activateListItem( QTreeWidgetItem * _item, int _column )
return;
}
if( f->type() == fileItem::SampleFile )
if( f->type() == fileItem::SampleFile ||
f->type() == fileItem::SpecialPresetFile )
{
// samples are per default opened in bb-editor because they're
// likely drum-samples etc.
@@ -283,17 +284,19 @@ void listView::sendToActiveInstrumentTrack( void )
// ok, it's an instrument-track, so we can apply the
// sample or the preset
engine::getMixer()->lock();
if( m_contextMenuItem->type() == fileItem::SampleFile )
if( m_contextMenuItem->type() == fileItem::SampleFile ||
m_contextMenuItem->type() ==
fileItem::SpecialPresetFile )
{
instrument * afp = itw->model()->loadInstrument(
engine::sampleExtensions()
[m_contextMenuItem
->extension()] );
if( afp != NULL )
QString e = m_contextMenuItem->extension();
instrument * i = itw->model()->getInstrument();
if( !i->getDescriptor()->supportsFileType( e ) )
{
afp->setParameter( "samplefile",
m_contextMenuItem->fullName() );
i = itw->model()->loadInstrument(
engine::sampleExtensions()[e] );
}
i->setParameter( "samplefile",
m_contextMenuItem->fullName() );
}
else if( m_contextMenuItem->type() ==
fileItem::PresetFile )
@@ -317,20 +320,21 @@ void listView::sendToActiveInstrumentTrack( void )
void listView::openInNewInstrumentTrack( trackContainer * _tc )
{
engine::getMixer()->lock();
if( m_contextMenuItem->type() == fileItem::SampleFile )
if( m_contextMenuItem->type() == fileItem::SampleFile ||
m_contextMenuItem->type() == fileItem::SpecialPresetFile )
{
instrumentTrack * ct = dynamic_cast<instrumentTrack *>(
track::create( track::InstrumentTrack, _tc ) );
#ifdef LMMS_DEBUG
assert( ct != NULL );
#endif
instrument * afp = ct->loadInstrument(
instrument * i = ct->loadInstrument(
engine::sampleExtensions()
[m_contextMenuItem
->extension()] );
if( afp != NULL )
if( i != NULL )
{
afp->setParameter( "samplefile",
i->setParameter( "samplefile",
m_contextMenuItem->fullName() );
}
//ct->toggledInstrumentTrackButton( TRUE );
@@ -385,7 +389,8 @@ void listView::contextMenuEvent( QContextMenuEvent * _e )
{
fileItem * f = dynamic_cast<fileItem *>( itemAt( _e->pos() ) );
if( f != NULL && ( f->type() == fileItem::SampleFile ||
f->type() == fileItem::PresetFile ) )
f->type() == fileItem::SpecialPresetFile ||
f->type() == fileItem::PresetFile ) )
{
m_contextMenuItem = f;
QMenu contextMenu( this );
@@ -459,10 +464,13 @@ void listView::mousePressEvent( QMouseEvent * _me )
m_previewPlayHandle = s;
delete tf;
}
else if( f->type() == fileItem::PresetFile )
else if( f->type() == fileItem::PresetFile ||
f->type() == fileItem::SpecialPresetFile )
{
m_previewPlayHandle = new presetPreviewPlayHandle(
f->fullName() );
m_previewPlayHandle =
new presetPreviewPlayHandle( f->fullName(),
f->type() ==
fileItem::SpecialPresetFile );
}
if( m_previewPlayHandle != NULL )
{
@@ -794,6 +802,7 @@ void fileItem::initPixmapStuff( void )
setIcon( 0, *s_projectFilePixmap );
break;
case PresetFile:
case SpecialPresetFile:
setIcon( 0, *s_presetFilePixmap );
break;
case SampleFile:
@@ -843,6 +852,10 @@ void fileItem::determineFileType( void )
{
m_type = PresetFile;
}
else if( ext == "xiz" )
{
m_type = SpecialPresetFile;
}
else if( engine::sampleExtensions().contains( ext ) )
{
m_type = SampleFile;