|
@ -6,17 +6,23 @@ namespace piMapper { |
|
|
SurfaceManager::SurfaceManager(){ |
|
|
SurfaceManager::SurfaceManager(){ |
|
|
mediaServer = 0; |
|
|
mediaServer = 0; |
|
|
selectedSurface = 0; |
|
|
selectedSurface = 0; |
|
|
ofAddListener(_surfaces.vertexChangedEvent, this, &SurfaceManager::onVertexChanged); |
|
|
ofAddListener( |
|
|
ofAddListener(_surfaces.verticesChangedEvent, this, &SurfaceManager::onVerticesChanged); |
|
|
SurfaceStack::instance()->vertexChangedEvent, |
|
|
|
|
|
this, |
|
|
|
|
|
&SurfaceManager::onVertexChanged); |
|
|
|
|
|
ofAddListener( |
|
|
|
|
|
SurfaceStack::instance()->verticesChangedEvent, |
|
|
|
|
|
this, |
|
|
|
|
|
&SurfaceManager::onVerticesChanged); |
|
|
_selectedVertexIndex = -1; |
|
|
_selectedVertexIndex = -1; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void SurfaceManager::draw(){ |
|
|
void SurfaceManager::draw(){ |
|
|
_surfaces.draw(); |
|
|
SurfaceStack::instance()->draw(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void SurfaceManager::addSurface(BaseSurface * surface){ |
|
|
void SurfaceManager::addSurface(BaseSurface * surface){ |
|
|
_surfaces.push_back(surface); |
|
|
SurfaceStack::instance()->push_back(surface); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void SurfaceManager::removeSelectedSurface(){ |
|
|
void SurfaceManager::removeSelectedSurface(){ |
|
@ -24,9 +30,9 @@ void SurfaceManager::removeSelectedSurface(){ |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
for(int i = 0; i < _surfaces.size(); i++){ |
|
|
for(int i = 0; i < SurfaceStack::instance()->size(); i++){ |
|
|
if(_surfaces[i] == selectedSurface){ |
|
|
if(SurfaceStack::instance()->at(i) == selectedSurface){ |
|
|
_surfaces.erase(i); |
|
|
SurfaceStack::instance()->erase(i); |
|
|
selectedSurface = 0; |
|
|
selectedSurface = 0; |
|
|
_selectedVertexIndex = -1; |
|
|
_selectedVertexIndex = -1; |
|
|
break; |
|
|
break; |
|
@ -35,27 +41,27 @@ void SurfaceManager::removeSelectedSurface(){ |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void SurfaceManager::removeSurface(){ |
|
|
void SurfaceManager::removeSurface(){ |
|
|
if(_surfaces.size() <= 0){ |
|
|
if(SurfaceStack::instance()->size() <= 0){ |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
BaseSurface * s = _surfaces.back(); |
|
|
BaseSurface * s = SurfaceStack::instance()->back(); |
|
|
_surfaces.pop_back(); |
|
|
SurfaceStack::instance()->pop_back(); |
|
|
delete s; |
|
|
delete s; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void SurfaceManager::deleteSurface(ofx::piMapper::BaseSurface * surface){ |
|
|
void SurfaceManager::deleteSurface(ofx::piMapper::BaseSurface * surface){ |
|
|
for(int i = 0; i < _surfaces.size(); ++i){ |
|
|
for(int i = 0; i < SurfaceStack::instance()->size(); ++i){ |
|
|
if(_surfaces[i] == surface){ |
|
|
if(SurfaceStack::instance()->at(i) == surface){ |
|
|
_surfaces.erase(i); |
|
|
SurfaceStack::instance()->erase(i); |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void SurfaceManager::clear(){ |
|
|
void SurfaceManager::clear(){ |
|
|
while(_surfaces.size()){ |
|
|
while(SurfaceStack::instance()->size()){ |
|
|
delete _surfaces.back(); |
|
|
delete SurfaceStack::instance()->back(); |
|
|
_surfaces.pop_back(); |
|
|
SurfaceStack::instance()->pop_back(); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -65,7 +71,7 @@ void SurfaceManager::saveXmlSettings(string fileName){ |
|
|
exit(EXIT_FAILURE); |
|
|
exit(EXIT_FAILURE); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
SettingsLoader::instance()->save(_surfaces, fileName); |
|
|
SettingsLoader::instance()->save(*SurfaceStack::instance(), fileName); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
bool SurfaceManager::loadXmlSettings(string fileName){ |
|
|
bool SurfaceManager::loadXmlSettings(string fileName){ |
|
@ -74,7 +80,7 @@ bool SurfaceManager::loadXmlSettings(string fileName){ |
|
|
exit(EXIT_FAILURE); |
|
|
exit(EXIT_FAILURE); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return SettingsLoader::instance()->load(_surfaces, *mediaServer, fileName); |
|
|
return SettingsLoader::instance()->load(*SurfaceStack::instance(), *mediaServer, fileName); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void SurfaceManager::setMediaServer(MediaServer * newMediaServer){ |
|
|
void SurfaceManager::setMediaServer(MediaServer * newMediaServer){ |
|
@ -82,19 +88,19 @@ void SurfaceManager::setMediaServer(MediaServer * newMediaServer){ |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
BaseSurface * SurfaceManager::selectSurface(int index){ |
|
|
BaseSurface * SurfaceManager::selectSurface(int index){ |
|
|
if(index >= _surfaces.size()){ |
|
|
if(index >= SurfaceStack::instance()->size()){ |
|
|
throw runtime_error("Surface index out of bounds."); |
|
|
throw runtime_error("Surface index out of bounds."); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
selectedSurface = _surfaces[index]; |
|
|
selectedSurface = SurfaceStack::instance()->at(index); |
|
|
_selectedVertexIndex = -1; |
|
|
_selectedVertexIndex = -1; |
|
|
ofSendMessage("surfaceSelected"); |
|
|
ofSendMessage("surfaceSelected"); |
|
|
return selectedSurface; |
|
|
return selectedSurface; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
BaseSurface * SurfaceManager::selectSurface(BaseSurface * surface){ |
|
|
BaseSurface * SurfaceManager::selectSurface(BaseSurface * surface){ |
|
|
for(int i = 0; i < _surfaces.size(); i++){ |
|
|
for(int i = 0; i < SurfaceStack::instance()->size(); i++){ |
|
|
if(_surfaces[i] == surface){ |
|
|
if(SurfaceStack::instance()->at(i) == surface){ |
|
|
selectedSurface = surface; |
|
|
selectedSurface = surface; |
|
|
_selectedVertexIndex = -1; |
|
|
_selectedVertexIndex = -1; |
|
|
ofSendMessage("surfaceSelected"); |
|
|
ofSendMessage("surfaceSelected"); |
|
@ -118,15 +124,15 @@ BaseSurface * SurfaceManager::selectNextSurface(){ |
|
|
return selectedSurface; |
|
|
return selectedSurface; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
for(int i = 0; i < _surfaces.size(); ++i){ |
|
|
for(int i = 0; i < SurfaceStack::instance()->size(); ++i){ |
|
|
if(_surfaces[i] == selectedSurface){ |
|
|
if(SurfaceStack::instance()->at(i) == selectedSurface){ |
|
|
if(i < _surfaces.size() - 1){ |
|
|
if(i < SurfaceStack::instance()->size() - 1){ |
|
|
next = i + 1; |
|
|
next = i + 1; |
|
|
}else{ |
|
|
}else{ |
|
|
next = 0; |
|
|
next = 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
selectedSurface = _surfaces[next]; |
|
|
selectedSurface = SurfaceStack::instance()->at(next); |
|
|
ofNotifyEvent(surfaceSelectedEvent, next, this); |
|
|
ofNotifyEvent(surfaceSelectedEvent, next, this); |
|
|
return selectedSurface; |
|
|
return selectedSurface; |
|
|
} |
|
|
} |
|
@ -140,21 +146,21 @@ BaseSurface * SurfaceManager::selectPrevSurface(){ |
|
|
_selectedVertexIndex = -1; |
|
|
_selectedVertexIndex = -1; |
|
|
|
|
|
|
|
|
if(selectedSurface == 0){ |
|
|
if(selectedSurface == 0){ |
|
|
prev = _surfaces.size() - 1; |
|
|
prev = SurfaceStack::instance()->size() - 1; |
|
|
selectedSurface = selectSurface(prev); |
|
|
selectedSurface = selectSurface(prev); |
|
|
ofNotifyEvent(surfaceSelectedEvent, prev, this); |
|
|
ofNotifyEvent(surfaceSelectedEvent, prev, this); |
|
|
return selectedSurface; |
|
|
return selectedSurface; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
for(int i = 0; i < _surfaces.size(); ++i){ |
|
|
for(int i = 0; i < SurfaceStack::instance()->size(); ++i){ |
|
|
if(_surfaces[i] == selectedSurface){ |
|
|
if(SurfaceStack::instance()->at(i) == selectedSurface){ |
|
|
if(i > 0){ |
|
|
if(i > 0){ |
|
|
prev = i - 1; |
|
|
prev = i - 1; |
|
|
}else{ |
|
|
}else{ |
|
|
prev = _surfaces.size() - 1; |
|
|
prev = SurfaceStack::instance()->size() - 1; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
selectedSurface = _surfaces[prev]; |
|
|
selectedSurface = SurfaceStack::instance()->at(prev); |
|
|
ofNotifyEvent(surfaceSelectedEvent, prev, this); |
|
|
ofNotifyEvent(surfaceSelectedEvent, prev, this); |
|
|
return selectedSurface; |
|
|
return selectedSurface; |
|
|
} |
|
|
} |
|
@ -239,8 +245,8 @@ void SurfaceManager::moveSelectionBy(ofVec2f v){ |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void SurfaceManager::moveAllSurfacesBy(ofVec2f v){ |
|
|
void SurfaceManager::moveAllSurfacesBy(ofVec2f v){ |
|
|
for(int i = 0; i < _surfaces.size(); ++i){ |
|
|
for(int i = 0; i < SurfaceStack::instance()->size(); ++i){ |
|
|
_surfaces[i]->moveBy(v); |
|
|
SurfaceStack::instance()->at(i)->moveBy(v); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -250,16 +256,16 @@ void SurfaceManager::deselectSurface(){ |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
BaseSurface * SurfaceManager::getSurface(int index){ |
|
|
BaseSurface * SurfaceManager::getSurface(int index){ |
|
|
if(index >= _surfaces.size()){ |
|
|
if(index >= SurfaceStack::instance()->size()){ |
|
|
throw runtime_error("Surface index out of bounds."); |
|
|
throw runtime_error("Surface index out of bounds."); |
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return _surfaces[index]; |
|
|
return SurfaceStack::instance()->at(index); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
int SurfaceManager::size(){ |
|
|
int SurfaceManager::size(){ |
|
|
return _surfaces.size(); |
|
|
return SurfaceStack::instance()->size(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
int SurfaceManager::getSelectedVertexIndex(){ |
|
|
int SurfaceManager::getSelectedVertexIndex(){ |
|
|