ResourceAction: new class for centralized functionality

Added new class ResourceAction which centralizes functionality of all
actions related to ResourceItems. This includes loading projects,
samples, presets, plugin-specific presets etc.

Using this new class we can avoid duplicate functionality in
ResourcePreviewer, ResourceBrowser, TrackContainerView, InstrumentTrack
etc.

Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
This commit is contained in:
Tobias Doerffel
2009-06-29 12:48:45 +02:00
parent d3cf731dc9
commit 7821dd210e
2 changed files with 175 additions and 0 deletions

71
include/ResourceAction.h Normal file
View File

@@ -0,0 +1,71 @@
/*
* ResourceAction.h - header file for ResourceAction
*
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program (see COPYING); if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
*/
#ifndef _RESOURCE_ACTION_H
#define _RESOURCE_ACTION_H
class instrumentTrack;
class trackContainer;
class ResourceItem;
class ResourceAction
{
public:
enum Actions
{
EditProperties,
LoadProject,
LoadInNewTrackSongEditor,
LoadInNewTrackBBEditor,
LoadInActiveInstrumentTrack,
DownloadIntoCollection,
UploadToWWW,
DeleteLocalResource,
ImportFile,
NumActions
} ;
typedef Actions Action;
ResourceAction( const ResourceItem * _item,
Action _action = NumActions ) :
m_action( _action ),
m_item( _item )
{
}
bool loadProject();
bool loadByPlugin( instrumentTrack * _target );
bool loadPreset( instrumentTrack * _target );
bool importProject( trackContainer * _target );
private:
Action m_action;
const ResourceItem * m_item;
} ;
#endif

104
src/core/ResourceAction.cpp Normal file
View File

@@ -0,0 +1,104 @@
/*
* ResourceBrowser.cpp - implementation of ResourceBrowser
*
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program (see COPYING); if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
*/
#include "ResourceAction.h"
#include "ResourceItem.h"
#include "ResourceFileMapper.h"
#include "import_filter.h"
#include "instrument.h"
#include "instrument_track.h"
#include "main_window.h"
#include "mmp.h"
#include "song.h"
bool ResourceAction::loadProject()
{
if( engine::getMainWindow()->mayChangeProject() )
{
ResourceFileMapper mapper( m_item );
if( m_item->isLocalResource() )
{
engine::getSong()->loadProject( mapper.fileName() );
}
else
{
engine::getSong()->createNewProjectFromTemplate(
mapper.fileName() );
}
return true;
}
return false;
}
bool ResourceAction::loadByPlugin( instrumentTrack * _target )
{
instrument * i = _target->getInstrument();
if( i == NULL ||
!i->getDescriptor()->supportsFileType(
m_item->nameExtension() ) )
{
i = _target->loadInstrument(
engine::pluginFileHandling()[m_item->nameExtension()] );
}
if( i )
{
i->loadResource( m_item );
return true;
}
return false;
}
bool ResourceAction::loadPreset( instrumentTrack * _target )
{
multimediaProject mmp( m_item->fetchData() );
instrumentTrack::removeMidiPortNode( mmp );
_target->setSimpleSerializing();
_target->loadSettings( mmp.content().toElement() );
return true;
}
bool ResourceAction::importProject( trackContainer * _target )
{
ResourceFileMapper mapper( m_item );
/*return*/ importFilter::import( mapper.fileName(), _target );
return true;
}
#include "moc_ResourceAction.cxx"