diff --git a/include/ResourceAction.h b/include/ResourceAction.h new file mode 100644 index 000000000..17f1ffab9 --- /dev/null +++ b/include/ResourceAction.h @@ -0,0 +1,71 @@ +/* + * ResourceAction.h - header file for ResourceAction + * + * Copyright (c) 2009 Tobias Doerffel + * + * 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 diff --git a/src/core/ResourceAction.cpp b/src/core/ResourceAction.cpp new file mode 100644 index 000000000..feea744a1 --- /dev/null +++ b/src/core/ResourceAction.cpp @@ -0,0 +1,104 @@ +/* + * ResourceBrowser.cpp - implementation of ResourceBrowser + * + * Copyright (c) 2009 Tobias Doerffel + * + * 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" +