ofxPiMapper fixed for C++17 & oF 12.0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

106 lines
3.0 KiB

#include "SetNextSourceCmd.h"
namespace ofx {
namespace piMapper {
SetNextSourceCmd::SetNextSourceCmd(BaseSurface * surface, SourcesEditorWidget * sourcesEditor){
_surface = surface;
_sourcesEditor = sourcesEditor;
}
void SetNextSourceCmd::exec(){
ofLogNotice("SetNextSourceCmd", "exec");
// Get current source
BaseSource * source = _surface->getSource();
int sourceType = source->getType();
string sourceId;
if(source->isLoadable()){
sourceId = source->getPath();
}else{
sourceId = source->getName();
}
// MediaServer shortcut
MediaServer * mediaServer = _sourcesEditor->getMediaServer();
// Read sources into a single vector
for(unsigned int i = 0; i < mediaServer->getImagePaths().size(); ++i){
SourceData data;
data.type = SourceType::SOURCE_TYPE_IMAGE;
data.id = mediaServer->getImagePaths()[i];
_sources.push_back(data);
}
for(unsigned int i = 0; i < mediaServer->getVideoPaths().size(); ++i){
SourceData data;
data.type = SourceType::SOURCE_TYPE_VIDEO;
data.id = mediaServer->getVideoPaths()[i];
_sources.push_back(data);
}
for(unsigned int i = 0; i < mediaServer->getFboSourceNames().size(); ++i){
SourceData data;
data.type = SourceType::SOURCE_TYPE_FBO;
data.id = mediaServer->getFboSourceNames()[i];
_sources.push_back(data);
}
if(_sources.size() <= 0){
return;
}
_sourceIndex = -1;
// Search for current source among all
for(unsigned int i = 0; i < _sources.size(); ++i){
if(sourceType == _sources[i].type && sourceId == _sources[i].id){
_sourceIndex = i;
break;
}
}
if(_sourceIndex == -1){
if(_sources.size()){
_nextSourceIndex = 0;
}else{
return;
}
}
_nextSourceIndex = _sourceIndex + 1;
if(_nextSourceIndex >= _sources.size()){
_nextSourceIndex = 0;
}
if(_sources[_nextSourceIndex].type == SourceType::SOURCE_TYPE_IMAGE){
_sourcesEditor->setImageSource(_sources[_nextSourceIndex].id);
}else if(_sources[_nextSourceIndex].type == SourceType::SOURCE_TYPE_VIDEO){
_sourcesEditor->setVideoSource(_sources[_nextSourceIndex].id);
}else if(_sources[_nextSourceIndex].type == SourceType::SOURCE_TYPE_FBO){
_sourcesEditor->setFboSource(_sources[_nextSourceIndex].id);
}else if(_sources[_nextSourceIndex].type == SourceType::SOURCE_TYPE_NONE){
_sourcesEditor->clearSource();
}
Gui::instance()->getTextureEditorWidget().createJoints();
}
void SetNextSourceCmd::undo(){
ofLogNotice("SetNextSourceCmd", "undo");
if(_sources[_sourceIndex].type == SourceType::SOURCE_TYPE_IMAGE){
_sourcesEditor->setImageSource(_sources[_sourceIndex].id);
}else if(_sources[_sourceIndex].type == SourceType::SOURCE_TYPE_VIDEO){
_sourcesEditor->setVideoSource(_sources[_sourceIndex].id);
}else if(_sources[_sourceIndex].type == SourceType::SOURCE_TYPE_FBO){
_sourcesEditor->setFboSource(_sources[_sourceIndex].id);
}else if(_sources[_sourceIndex].type == SourceType::SOURCE_TYPE_NONE){
_sourcesEditor->clearSource();
}
Gui::instance()->getTextureEditorWidget().createJoints();
}
} // namespace piMapper
} // namespace ofx