From 0f1ded7ba30b1c439b1ae9240bbd82a3a47d32ad Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 3 Feb 2016 21:39:50 +0100 Subject: [PATCH] Add `selectNextSurface` and `selectPrevSurface` methods to `SurfaceManager` --- src/Surfaces/SurfaceManager.cpp | 54 +++++++++++++++++++++++++++++++++ src/Surfaces/SurfaceManager.h | 4 ++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/src/Surfaces/SurfaceManager.cpp b/src/Surfaces/SurfaceManager.cpp index c2463fd..4b86ec4 100644 --- a/src/Surfaces/SurfaceManager.cpp +++ b/src/Surfaces/SurfaceManager.cpp @@ -93,6 +93,60 @@ BaseSurface * SurfaceManager::selectSurface(BaseSurface * surface){ return 0; } +BaseSurface * SurfaceManager::selectNextSurface(){ + int next; + + if(selectedSurface == 0){ + next = 0; + selectedSurface = selectSurface(next); + ofNotifyEvent(surfaceSelectedEvent, next, this); + return selectedSurface; + } + + for(int i = 0; i < _surfaces.size(); ++i){ + if(_surfaces[i] == selectedSurface){ + if(i < _surfaces.size() - 1){ + next = i + 1; + }else{ + next = 0; + } + + selectedSurface = _surfaces[next]; + ofNotifyEvent(surfaceSelectedEvent, next, this); + return selectedSurface; + } + } + + return 0; +} + +BaseSurface * SurfaceManager::selectPrevSurface(){ + int prev; + + if(selectedSurface == 0){ + prev = _surfaces.size() - 1; + selectedSurface = selectSurface(prev); + ofNotifyEvent(surfaceSelectedEvent, prev, this); + return selectedSurface; + } + + for(int i = 0; i < _surfaces.size(); ++i){ + if(_surfaces[i] == selectedSurface){ + if(i > 0){ + prev = i - 1; + }else{ + prev = _surfaces.size() - 1; + } + + selectedSurface = _surfaces[prev]; + ofNotifyEvent(surfaceSelectedEvent, prev, this); + return selectedSurface; + } + } + + return 0; +} + BaseSurface * SurfaceManager::getSelectedSurface(){ return selectedSurface; } diff --git a/src/Surfaces/SurfaceManager.h b/src/Surfaces/SurfaceManager.h index 76c4c31..c8f2932 100644 --- a/src/Surfaces/SurfaceManager.h +++ b/src/Surfaces/SurfaceManager.h @@ -39,6 +39,8 @@ class SurfaceManager { BaseSurface * getSurface(int index); BaseSurface * selectSurface(int index); BaseSurface * selectSurface(BaseSurface * surface); + BaseSurface * selectNextSurface(); + BaseSurface * selectPrevSurface(); BaseSurface * getSelectedSurface(); int size(); @@ -46,7 +48,7 @@ class SurfaceManager { ofEvent vertexChangedEvent; ofEvent > verticesChangedEvent; ofEvent surfaceSelectedEvent; - + void onVertexChanged(ofVec3f & vertex); void onVerticesChanged(vector & vertices);