diff --git a/.gitignore b/.gitignore index 593962f..8cd07bf 100644 --- a/.gitignore +++ b/.gitignore @@ -105,3 +105,17 @@ Desktop.ini *.log *.sql *.sqlite + +example/cmake-build-debug/ + +example/\.idea/ + +example/cmake-build-release/ + +example/example\.xcodeproj/xcshareddata/xcschemes/ + +.idea/ + +cmake-build-debug/ + +CMakeLists\.txt diff --git a/README.md b/README.md index b2d8902..cd8032d 100644 --- a/README.md +++ b/README.md @@ -25,15 +25,6 @@ You can use the example application of the addon for projection mapping projects ``` -## Compiling on Linux - -There might be issues with compiling because `ofxOMXPlayer` and `ofxRPiCameraVideoGrabber` addons do not exist on Linux and also other non-RPi platforms. To avoid the issues, do the following. - -1. Open `example/addons.make` and remove ofxOMXPlayer line. -2. Open `example-camera/addons.make` and remove ofxRPiCameraVideoGrabber line. -3. Compile one or both examples by using make. - - ## Problems with Audio If you are having problems with audio playback, here are two steps for you. Before you do these, make sure audio of your video file works. @@ -162,33 +153,41 @@ Key | Function 2 | Texture editing mode 3 | Projection mapping mode, use this to select a surface first 4 | Source selection mode -i | Show info +c | Show info t | Add triangle surface q | Add quad surface +x | Add hexagon surface g | Add grid warp surface -d | duplicate selected surface -\+ | Scale surface up -\- | Scale surface down +a | duplicate selected surface +o | Scale surface up +i | Scale surface down p | toggle perspective warping (quad surfaces only) -] | add columns to grid surface (grid warp surfaces only) -[ | remove columns from grid surface (grid warp surfaces only) -} | add rows to grid surface (grid warp surfaces only) -{ | remove rows from grid surface (grid warp surfaces only) +v | add columns to grid surface (grid warp surfaces only) +b | remove columns from grid surface (grid warp surfaces only) +n | add rows to grid surface (grid warp surfaces only) +m | remove rows from grid surface (grid warp surfaces only) . | select next surface (projection mapping mode only) , | select previous surface (projection mapping mode only) -\> | select next vertex -\< | select previous vertex -0 | Move selected surface one layer up -9 | Move selected surface one layer down +k | select next vertex +l | select previous vertex +h | Move selected surface one layer up +j | Move selected surface one layer down s | Save composition -l | Hide/show layer panel +y | Hide/show layer panel z | Undo rbt | Reboot (Raspberry Pi only) sdn | Shutdown (Raspberry Pi only) new | Clear composition (remove all surfaces) ext | Exit application and return to command line -BACKSPACE ('\' via SSH) | Delete surface. -SPACE | Toggle pause for video sources (texture and projection mapping modes) -TAB | Select next source (no need to use the source selection interface) -Arrow keys | Move selection. If no surface is selected in the projection mapping mode, all surfaces are moved. +d | Delete surface. +w | Toggle pause for video sources (texture and projection mapping modes) +5 | Select next source (no need to use the source selection interface) +8 | Move selection Up +9 | Move selection Down +7 | Move selection Left +0 | Move selection Right +If no surface is selected in the projection mapping mode, all surfaces are moved. + +Dont know if this works already: + \/ | Toggle 1px/10px steps for keyboard moves on Raspberry Pi diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 34fa65e..3cf049a 100755 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -4,6 +4,7 @@ # ===================== CMake Settings =================== # ======================================================== cmake_minimum_required( VERSION 3.3 ) + project( openframeworks ) # ======================================================== @@ -17,21 +18,23 @@ set( APP_NAME example_ofxPiMapper ) set( OF_DIRECTORY_BY_USER "../../.." ) # --------------------- Source Files --------------------- + +file( GLOB_RECURSE + APP_SRC + "src/*.cpp" + ) + set( ${APP_NAME}_SOURCE_FILES - src/main.cpp - src/ofApp.cpp - src/CrossSource.cpp - src/CustomSource.cpp - src/Settings.cpp) + ${APP_SRC} ) # ------------------------ AddOns ----------------------- set( OFX_ADDONS_ACTIVE - ofxXmlSettings - ofxGui - ofxPiMapper - ofxIO - ) + ofxXmlSettings + ofxGui + ofxPiMapper +# ofxIO + ) # ========================================================================= # ============================== OpenFrameworks =========================== diff --git a/example/addons.make b/example/addons.make index aee7c01..963941c 100644 --- a/example/addons.make +++ b/example/addons.make @@ -1,4 +1,4 @@ +ofxGui ofxPiMapper ofxXmlSettings -ofxGui ofxOMXPlayer diff --git a/example/bin/data/magslideshow_settings.xml b/example/bin/data/magslideshow_settings.xml new file mode 100644 index 0000000..58c00da --- /dev/null +++ b/example/bin/data/magslideshow_settings.xml @@ -0,0 +1,15 @@ + + 1920 + 1080 + 2 + + PING-PONG + 0 + + + Dissolve + 2 + + + FitProportionally + diff --git a/example/bin/data/ofxpimapper.xml b/example/bin/data/ofxpimapper.xml index 926e9ef..7821700 100644 --- a/example/bin/data/ofxpimapper.xml +++ b/example/bin/data/ofxpimapper.xml @@ -72,7 +72,7 @@ fbo - Custom FBO Source + Slide Show Source 1 diff --git a/example/example.xcodeproj/project.pbxproj b/example/example.xcodeproj/project.pbxproj index 3eaea39..0815d40 100644 --- a/example/example.xcodeproj/project.pbxproj +++ b/example/example.xcodeproj/project.pbxproj @@ -7,79 +7,83 @@ objects = { /* Begin PBXBuildFile section */ - 0115A67B1DBF93BA00C51732 /* Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A5D91DBF93BA00C51732 /* Application.cpp */; }; - 0115A67C1DBF93BA00C51732 /* ApplicationBaseMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A5DC1DBF93BA00C51732 /* ApplicationBaseMode.cpp */; }; - 0115A67D1DBF93BA00C51732 /* PresentationMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A5DE1DBF93BA00C51732 /* PresentationMode.cpp */; }; - 0115A67E1DBF93BA00C51732 /* ProjectionMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A5E01DBF93BA00C51732 /* ProjectionMappingMode.cpp */; }; - 0115A67F1DBF93BA00C51732 /* SourceSelectionMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A5E21DBF93BA00C51732 /* SourceSelectionMode.cpp */; }; - 0115A6801DBF93BA00C51732 /* TextureMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A5E41DBF93BA00C51732 /* TextureMappingMode.cpp */; }; - 0115A6811DBF93BA00C51732 /* SettingsLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A5E61DBF93BA00C51732 /* SettingsLoader.cpp */; }; - 0115A6A51DBF93BA00C51732 /* Gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6311DBF93BA00C51732 /* Gui.cpp */; }; - 0115A6A61DBF93BA00C51732 /* LayerPanelWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6351DBF93BA00C51732 /* LayerPanelWidget.cpp */; }; - 0115A6A71DBF93BA00C51732 /* ProjectionEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6371DBF93BA00C51732 /* ProjectionEditorWidget.cpp */; }; - 0115A6A81DBF93BA00C51732 /* ScaleWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6391DBF93BA00C51732 /* ScaleWidget.cpp */; }; - 0115A6A91DBF93BA00C51732 /* SourcesEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A63B1DBF93BA00C51732 /* SourcesEditorWidget.cpp */; }; - 0115A6AA1DBF93BA00C51732 /* SurfaceHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A63D1DBF93BA00C51732 /* SurfaceHighlightWidget.cpp */; }; - 0115A6AC1DBF93BA00C51732 /* TextureEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6411DBF93BA00C51732 /* TextureEditorWidget.cpp */; }; - 0115A6AD1DBF93BA00C51732 /* TextureHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6431DBF93BA00C51732 /* TextureHighlightWidget.cpp */; }; - 0115A6AE1DBF93BA00C51732 /* Info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6461DBF93BA00C51732 /* Info.cpp */; }; - 0115A6AF1DBF93BA00C51732 /* DirectoryWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6491DBF93BA00C51732 /* DirectoryWatcher.cpp */; }; - 0115A6B01DBF93BA00C51732 /* MediaServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A64B1DBF93BA00C51732 /* MediaServer.cpp */; }; - 0115A6B11DBF93BA00C51732 /* ofxPiMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A64D1DBF93BA00C51732 /* ofxPiMapper.cpp */; }; - 0115A6B21DBF93BA00C51732 /* BaseSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6501DBF93BA00C51732 /* BaseSource.cpp */; }; - 0115A6B31DBF93BA00C51732 /* FboSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6521DBF93BA00C51732 /* FboSource.cpp */; }; - 0115A6B41DBF93BA00C51732 /* ImageSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6541DBF93BA00C51732 /* ImageSource.cpp */; }; - 0115A6B51DBF93BA00C51732 /* OMXPlayerCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6561DBF93BA00C51732 /* OMXPlayerCache.cpp */; }; - 0115A6B61DBF93BA00C51732 /* VideoSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6591DBF93BA00C51732 /* VideoSource.cpp */; }; - 0115A6B71DBF93BA00C51732 /* BaseSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A65C1DBF93BA00C51732 /* BaseSurface.cpp */; }; - 0115A6B81DBF93BA00C51732 /* GridWarpSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A65E1DBF93BA00C51732 /* GridWarpSurface.cpp */; }; - 0115A6B91DBF93BA00C51732 /* HexagonSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6601DBF93BA00C51732 /* HexagonSurface.cpp */; }; - 0115A6BA1DBF93BA00C51732 /* QuadSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6621DBF93BA00C51732 /* QuadSurface.cpp */; }; - 0115A6BB1DBF93BA00C51732 /* SurfaceFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6641DBF93BA00C51732 /* SurfaceFactory.cpp */; }; - 0115A6BC1DBF93BA00C51732 /* SurfaceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6661DBF93BA00C51732 /* SurfaceManager.cpp */; }; - 0115A6BD1DBF93BA00C51732 /* SurfaceStack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6681DBF93BA00C51732 /* SurfaceStack.cpp */; }; - 0115A6BE1DBF93BA00C51732 /* TriangleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A66B1DBF93BA00C51732 /* TriangleSurface.cpp */; }; - 0115A6BF1DBF93BA00C51732 /* BaseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A66E1DBF93BA00C51732 /* BaseJoint.cpp */; }; - 0115A6C01DBF93BA00C51732 /* CircleJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6701DBF93BA00C51732 /* CircleJoint.cpp */; }; - 0115A6C11DBF93BA00C51732 /* RadioList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6741DBF93BA00C51732 /* RadioList.cpp */; }; - 0115A6C21DBF93BA00C51732 /* HomographyHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6771DBF93BA00C51732 /* HomographyHelper.cpp */; }; - 016630881DC66DAB0081F28F /* AddGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166303D1DC66DAB0081F28F /* AddGridColCmd.cpp */; }; - 016630891DC66DAB0081F28F /* AddGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166303F1DC66DAB0081F28F /* AddGridRowCmd.cpp */; }; - 0166308A1DC66DAB0081F28F /* AddSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630411DC66DAB0081F28F /* AddSurfaceCmd.cpp */; }; - 0166308B1DC66DAB0081F28F /* ClearSurfacesCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630441DC66DAB0081F28F /* ClearSurfacesCmd.cpp */; }; - 0166308C1DC66DAB0081F28F /* CmdManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630461DC66DAB0081F28F /* CmdManager.cpp */; }; - 0166308D1DC66DAB0081F28F /* DeselectSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630481DC66DAB0081F28F /* DeselectSurfaceCmd.cpp */; }; - 0166308E1DC66DAB0081F28F /* DeselectTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166304A1DC66DAB0081F28F /* DeselectTexCoordCmd.cpp */; }; - 0166308F1DC66DAB0081F28F /* DuplicateSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166304C1DC66DAB0081F28F /* DuplicateSurfaceCmd.cpp */; }; - 016630901DC66DAB0081F28F /* MvAllTexCoordsCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166304E1DC66DAB0081F28F /* MvAllTexCoordsCmd.cpp */; }; - 016630911DC66DAB0081F28F /* MvLayerDnCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630501DC66DAB0081F28F /* MvLayerDnCmd.cpp */; }; - 016630921DC66DAB0081F28F /* MvLayerUpCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630521DC66DAB0081F28F /* MvLayerUpCmd.cpp */; }; - 016630931DC66DAB0081F28F /* MvSelectionCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630541DC66DAB0081F28F /* MvSelectionCmd.cpp */; }; - 016630941DC66DAB0081F28F /* MvSurfaceVertCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630561DC66DAB0081F28F /* MvSurfaceVertCmd.cpp */; }; - 016630951DC66DAB0081F28F /* MvTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630581DC66DAB0081F28F /* MvTexCoordCmd.cpp */; }; - 016630961DC66DAB0081F28F /* RmGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166305A1DC66DAB0081F28F /* RmGridColCmd.cpp */; }; - 016630971DC66DAB0081F28F /* RmGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166305C1DC66DAB0081F28F /* RmGridRowCmd.cpp */; }; - 016630981DC66DAB0081F28F /* RmSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166305E1DC66DAB0081F28F /* RmSurfaceCmd.cpp */; }; - 016630991DC66DAB0081F28F /* SaveTexCoordPosCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630601DC66DAB0081F28F /* SaveTexCoordPosCmd.cpp */; }; - 0166309A1DC66DAB0081F28F /* ScaleSurfaceFromToCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630621DC66DAB0081F28F /* ScaleSurfaceFromToCmd.cpp */; }; - 0166309B1DC66DAB0081F28F /* SelNextSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630641DC66DAB0081F28F /* SelNextSurfaceCmd.cpp */; }; - 0166309C1DC66DAB0081F28F /* SelNextTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630661DC66DAB0081F28F /* SelNextTexCoordCmd.cpp */; }; - 0166309D1DC66DAB0081F28F /* SelNextVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630681DC66DAB0081F28F /* SelNextVertexCmd.cpp */; }; - 0166309E1DC66DAB0081F28F /* SelPrevSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166306A1DC66DAB0081F28F /* SelPrevSurfaceCmd.cpp */; }; - 0166309F1DC66DAB0081F28F /* SelPrevTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166306C1DC66DAB0081F28F /* SelPrevTexCoordCmd.cpp */; }; - 016630A01DC66DAB0081F28F /* SelPrevVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166306E1DC66DAB0081F28F /* SelPrevVertexCmd.cpp */; }; - 016630A11DC66DAB0081F28F /* SelSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630701DC66DAB0081F28F /* SelSurfaceCmd.cpp */; }; - 016630A21DC66DAB0081F28F /* SelTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630721DC66DAB0081F28F /* SelTexCoordCmd.cpp */; }; - 016630A31DC66DAB0081F28F /* SelVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630741DC66DAB0081F28F /* SelVertexCmd.cpp */; }; - 016630A41DC66DAB0081F28F /* SetApplicationModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630761DC66DAB0081F28F /* SetApplicationModeCmd.cpp */; }; - 016630A51DC66DAB0081F28F /* SetNextSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630781DC66DAB0081F28F /* SetNextSourceCmd.cpp */; }; - 016630A61DC66DAB0081F28F /* SetPresetCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166307A1DC66DAB0081F28F /* SetPresetCmd.cpp */; }; - 016630A71DC66DAB0081F28F /* SetSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166307C1DC66DAB0081F28F /* SetSourceCmd.cpp */; }; - 016630A81DC66DAB0081F28F /* SetTexMapDrawModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166307E1DC66DAB0081F28F /* SetTexMapDrawModeCmd.cpp */; }; - 016630A91DC66DAB0081F28F /* StartDragSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630801DC66DAB0081F28F /* StartDragSurfaceCmd.cpp */; }; - 016630AA1DC66DAB0081F28F /* ToggleAnimatedSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630821DC66DAB0081F28F /* ToggleAnimatedSourceCmd.cpp */; }; - 016630AB1DC66DAB0081F28F /* TogglePerspectiveCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630841DC66DAB0081F28F /* TogglePerspectiveCmd.cpp */; }; - 016630AC1DC66DAB0081F28F /* TranslateCanvasCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630861DC66DAB0081F28F /* TranslateCanvasCmd.cpp */; }; + 01815E8C1FE7D59200C35E93 /* Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DE01FE7D53700C35E93 /* Application.cpp */; }; + 01815E8D1FE7D59200C35E93 /* ApplicationBaseMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DE31FE7D53700C35E93 /* ApplicationBaseMode.cpp */; }; + 01815E8E1FE7D59200C35E93 /* PresentationMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DE51FE7D53700C35E93 /* PresentationMode.cpp */; }; + 01815E8F1FE7D59200C35E93 /* ProjectionMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DE71FE7D53700C35E93 /* ProjectionMappingMode.cpp */; }; + 01815E901FE7D59200C35E93 /* SourceSelectionMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DE91FE7D53700C35E93 /* SourceSelectionMode.cpp */; }; + 01815E911FE7D59200C35E93 /* TextureMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DEB1FE7D53700C35E93 /* TextureMappingMode.cpp */; }; + 01815E921FE7D59200C35E93 /* SettingsLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DED1FE7D53700C35E93 /* SettingsLoader.cpp */; }; + 01815E931FE7D59200C35E93 /* AddGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DF01FE7D53700C35E93 /* AddGridColCmd.cpp */; }; + 01815E941FE7D59200C35E93 /* AddGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DF21FE7D53700C35E93 /* AddGridRowCmd.cpp */; }; + 01815E951FE7D59200C35E93 /* AddSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DF41FE7D53700C35E93 /* AddSurfaceCmd.cpp */; }; + 01815E961FE7D59200C35E93 /* ClearSurfacesCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DF71FE7D53700C35E93 /* ClearSurfacesCmd.cpp */; }; + 01815E971FE7D59200C35E93 /* CmdManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DF91FE7D53700C35E93 /* CmdManager.cpp */; }; + 01815E981FE7D59200C35E93 /* DeselectSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DFB1FE7D53700C35E93 /* DeselectSurfaceCmd.cpp */; }; + 01815E991FE7D59200C35E93 /* DeselectTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DFD1FE7D53700C35E93 /* DeselectTexCoordCmd.cpp */; }; + 01815E9A1FE7D59200C35E93 /* DuplicateSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DFF1FE7D53700C35E93 /* DuplicateSurfaceCmd.cpp */; }; + 01815E9B1FE7D59200C35E93 /* MvAllTexCoordsCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E011FE7D53700C35E93 /* MvAllTexCoordsCmd.cpp */; }; + 01815E9C1FE7D59200C35E93 /* MvLayerDnCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E031FE7D53700C35E93 /* MvLayerDnCmd.cpp */; }; + 01815E9D1FE7D59200C35E93 /* MvLayerUpCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E051FE7D53700C35E93 /* MvLayerUpCmd.cpp */; }; + 01815E9E1FE7D59200C35E93 /* MvSelectionCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E071FE7D53700C35E93 /* MvSelectionCmd.cpp */; }; + 01815E9F1FE7D59200C35E93 /* MvSurfaceVertCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E091FE7D53700C35E93 /* MvSurfaceVertCmd.cpp */; }; + 01815EA01FE7D59200C35E93 /* MvTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E0B1FE7D53700C35E93 /* MvTexCoordCmd.cpp */; }; + 01815EA11FE7D59200C35E93 /* RmGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E0D1FE7D53700C35E93 /* RmGridColCmd.cpp */; }; + 01815EA21FE7D59200C35E93 /* RmGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E0F1FE7D53700C35E93 /* RmGridRowCmd.cpp */; }; + 01815EA31FE7D59200C35E93 /* RmSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E111FE7D53700C35E93 /* RmSurfaceCmd.cpp */; }; + 01815EA41FE7D59200C35E93 /* SaveTexCoordPosCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E131FE7D53700C35E93 /* SaveTexCoordPosCmd.cpp */; }; + 01815EA51FE7D59200C35E93 /* ScaleSurfaceFromToCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E151FE7D53700C35E93 /* ScaleSurfaceFromToCmd.cpp */; }; + 01815EA61FE7D59200C35E93 /* SelNextSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E171FE7D53700C35E93 /* SelNextSurfaceCmd.cpp */; }; + 01815EA71FE7D59200C35E93 /* SelNextTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E191FE7D53700C35E93 /* SelNextTexCoordCmd.cpp */; }; + 01815EA81FE7D59200C35E93 /* SelNextVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E1B1FE7D53700C35E93 /* SelNextVertexCmd.cpp */; }; + 01815EA91FE7D59200C35E93 /* SelPrevSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E1D1FE7D53700C35E93 /* SelPrevSurfaceCmd.cpp */; }; + 01815EAA1FE7D59200C35E93 /* SelPrevTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E1F1FE7D53700C35E93 /* SelPrevTexCoordCmd.cpp */; }; + 01815EAB1FE7D59200C35E93 /* SelPrevVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E211FE7D53700C35E93 /* SelPrevVertexCmd.cpp */; }; + 01815EAC1FE7D59200C35E93 /* SelSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E231FE7D53700C35E93 /* SelSurfaceCmd.cpp */; }; + 01815EAD1FE7D59200C35E93 /* SelTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E251FE7D53700C35E93 /* SelTexCoordCmd.cpp */; }; + 01815EAE1FE7D59200C35E93 /* SelVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E271FE7D53700C35E93 /* SelVertexCmd.cpp */; }; + 01815EAF1FE7D59200C35E93 /* SetApplicationModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E291FE7D53700C35E93 /* SetApplicationModeCmd.cpp */; }; + 01815EB01FE7D59200C35E93 /* SetNextSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E2B1FE7D53700C35E93 /* SetNextSourceCmd.cpp */; }; + 01815EB11FE7D59200C35E93 /* SetPresetCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E2D1FE7D53700C35E93 /* SetPresetCmd.cpp */; }; + 01815EB21FE7D59200C35E93 /* SetSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E2F1FE7D53700C35E93 /* SetSourceCmd.cpp */; }; + 01815EB31FE7D59200C35E93 /* SetTexMapDrawModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E311FE7D53700C35E93 /* SetTexMapDrawModeCmd.cpp */; }; + 01815EB41FE7D59200C35E93 /* StartDragSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E331FE7D53700C35E93 /* StartDragSurfaceCmd.cpp */; }; + 01815EB51FE7D59200C35E93 /* ToggleAnimatedSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E351FE7D53700C35E93 /* ToggleAnimatedSourceCmd.cpp */; }; + 01815EB61FE7D59200C35E93 /* TogglePerspectiveCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E371FE7D53700C35E93 /* TogglePerspectiveCmd.cpp */; }; + 01815EB71FE7D59200C35E93 /* TranslateCanvasCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E391FE7D53700C35E93 /* TranslateCanvasCmd.cpp */; }; + 01815EB81FE7D59200C35E93 /* Gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E3C1FE7D53700C35E93 /* Gui.cpp */; }; + 01815EB91FE7D59200C35E93 /* LayerPanelWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E401FE7D53700C35E93 /* LayerPanelWidget.cpp */; }; + 01815EBA1FE7D59200C35E93 /* ProjectionEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E421FE7D53700C35E93 /* ProjectionEditorWidget.cpp */; }; + 01815EBB1FE7D59200C35E93 /* ScaleWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E441FE7D53700C35E93 /* ScaleWidget.cpp */; }; + 01815EBC1FE7D59200C35E93 /* SourcesEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E461FE7D53700C35E93 /* SourcesEditorWidget.cpp */; }; + 01815EBD1FE7D59200C35E93 /* SurfaceHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E481FE7D53700C35E93 /* SurfaceHighlightWidget.cpp */; }; + 01815EBE1FE7D59200C35E93 /* TextureEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E4A1FE7D53700C35E93 /* TextureEditorWidget.cpp */; }; + 01815EBF1FE7D59200C35E93 /* TextureHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E4C1FE7D53700C35E93 /* TextureHighlightWidget.cpp */; }; + 01815EC01FE7D59200C35E93 /* Info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E4F1FE7D53700C35E93 /* Info.cpp */; }; + 01815EC11FE7D59200C35E93 /* DirectoryWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E521FE7D53700C35E93 /* DirectoryWatcher.cpp */; }; + 01815EC21FE7D59200C35E93 /* MediaServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E541FE7D53700C35E93 /* MediaServer.cpp */; }; + 01815EC31FE7D59200C35E93 /* ofxPiMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E571FE7D53700C35E93 /* ofxPiMapper.cpp */; }; + 01815EC41FE7D59200C35E93 /* BaseSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E5A1FE7D53700C35E93 /* BaseSource.cpp */; }; + 01815EC51FE7D59200C35E93 /* FboSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E5C1FE7D53700C35E93 /* FboSource.cpp */; }; + 01815EC61FE7D59200C35E93 /* ImageSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E5E1FE7D53700C35E93 /* ImageSource.cpp */; }; + 01815EC71FE7D59200C35E93 /* magSlide.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E601FE7D53700C35E93 /* magSlide.cpp */; }; + 01815EC81FE7D59200C35E93 /* magSlideShowSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E621FE7D53700C35E93 /* magSlideShowSource.cpp */; }; + 01815EC91FE7D59200C35E93 /* magSlideTransition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E641FE7D53700C35E93 /* magSlideTransition.cpp */; }; + 01815ECA1FE7D59200C35E93 /* magSlideTransitionFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E661FE7D53700C35E93 /* magSlideTransitionFactory.cpp */; }; + 01815ECB1FE7D59200C35E93 /* OMXPlayerCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E681FE7D53700C35E93 /* OMXPlayerCache.cpp */; }; + 01815ECC1FE7D59200C35E93 /* VideoSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E6C1FE7D53700C35E93 /* VideoSource.cpp */; }; + 01815ECD1FE7D59200C35E93 /* BaseSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E6F1FE7D53700C35E93 /* BaseSurface.cpp */; }; + 01815ECE1FE7D59200C35E93 /* GridWarpSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E711FE7D53700C35E93 /* GridWarpSurface.cpp */; }; + 01815ECF1FE7D59200C35E93 /* HexagonSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E731FE7D53700C35E93 /* HexagonSurface.cpp */; }; + 01815ED01FE7D59200C35E93 /* QuadSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E751FE7D53700C35E93 /* QuadSurface.cpp */; }; + 01815ED11FE7D59200C35E93 /* SurfaceFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E771FE7D53700C35E93 /* SurfaceFactory.cpp */; }; + 01815ED21FE7D59200C35E93 /* SurfaceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E791FE7D53700C35E93 /* SurfaceManager.cpp */; }; + 01815ED31FE7D59200C35E93 /* SurfaceStack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E7B1FE7D53700C35E93 /* SurfaceStack.cpp */; }; + 01815ED41FE7D59200C35E93 /* TriangleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E7E1FE7D53700C35E93 /* TriangleSurface.cpp */; }; + 01815ED51FE7D59200C35E93 /* BaseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E811FE7D53700C35E93 /* BaseJoint.cpp */; }; + 01815ED61FE7D59200C35E93 /* CircleJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E831FE7D53700C35E93 /* CircleJoint.cpp */; }; + 01815ED71FE7D59200C35E93 /* RadioList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E871FE7D53700C35E93 /* RadioList.cpp */; }; + 01815ED81FE7D59200C35E93 /* HomographyHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E8A1FE7D53700C35E93 /* HomographyHelper.cpp */; }; 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */; }; 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483D192224F90008A7F5 /* tinyxml.cpp */; }; 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */; }; @@ -145,159 +149,168 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0100D9401E33E667000D7FA5 /* Mode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mode.h; sourceTree = ""; }; - 0115A5D91DBF93BA00C51732 /* Application.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Application.cpp; sourceTree = ""; }; - 0115A5DA1DBF93BA00C51732 /* Application.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Application.h; sourceTree = ""; }; - 0115A5DC1DBF93BA00C51732 /* ApplicationBaseMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ApplicationBaseMode.cpp; sourceTree = ""; }; - 0115A5DD1DBF93BA00C51732 /* ApplicationBaseMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApplicationBaseMode.h; sourceTree = ""; }; - 0115A5DE1DBF93BA00C51732 /* PresentationMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PresentationMode.cpp; sourceTree = ""; }; - 0115A5DF1DBF93BA00C51732 /* PresentationMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PresentationMode.h; sourceTree = ""; }; - 0115A5E01DBF93BA00C51732 /* ProjectionMappingMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionMappingMode.cpp; sourceTree = ""; }; - 0115A5E11DBF93BA00C51732 /* ProjectionMappingMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProjectionMappingMode.h; sourceTree = ""; }; - 0115A5E21DBF93BA00C51732 /* SourceSelectionMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SourceSelectionMode.cpp; sourceTree = ""; }; - 0115A5E31DBF93BA00C51732 /* SourceSelectionMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceSelectionMode.h; sourceTree = ""; }; - 0115A5E41DBF93BA00C51732 /* TextureMappingMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureMappingMode.cpp; sourceTree = ""; }; - 0115A5E51DBF93BA00C51732 /* TextureMappingMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureMappingMode.h; sourceTree = ""; }; - 0115A5E61DBF93BA00C51732 /* SettingsLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingsLoader.cpp; sourceTree = ""; }; - 0115A5E71DBF93BA00C51732 /* SettingsLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsLoader.h; sourceTree = ""; }; - 0115A6311DBF93BA00C51732 /* Gui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Gui.cpp; sourceTree = ""; }; - 0115A6321DBF93BA00C51732 /* Gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gui.h; sourceTree = ""; }; - 0115A6341DBF93BA00C51732 /* GuiBaseWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GuiBaseWidget.h; sourceTree = ""; }; - 0115A6351DBF93BA00C51732 /* LayerPanelWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LayerPanelWidget.cpp; sourceTree = ""; }; - 0115A6361DBF93BA00C51732 /* LayerPanelWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LayerPanelWidget.h; sourceTree = ""; }; - 0115A6371DBF93BA00C51732 /* ProjectionEditorWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionEditorWidget.cpp; sourceTree = ""; }; - 0115A6381DBF93BA00C51732 /* ProjectionEditorWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProjectionEditorWidget.h; sourceTree = ""; }; - 0115A6391DBF93BA00C51732 /* ScaleWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleWidget.cpp; sourceTree = ""; }; - 0115A63A1DBF93BA00C51732 /* ScaleWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScaleWidget.h; sourceTree = ""; }; - 0115A63B1DBF93BA00C51732 /* SourcesEditorWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SourcesEditorWidget.cpp; sourceTree = ""; }; - 0115A63C1DBF93BA00C51732 /* SourcesEditorWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourcesEditorWidget.h; sourceTree = ""; }; - 0115A63D1DBF93BA00C51732 /* SurfaceHighlightWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceHighlightWidget.cpp; sourceTree = ""; }; - 0115A63E1DBF93BA00C51732 /* SurfaceHighlightWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceHighlightWidget.h; sourceTree = ""; }; - 0115A6411DBF93BA00C51732 /* TextureEditorWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureEditorWidget.cpp; sourceTree = ""; }; - 0115A6421DBF93BA00C51732 /* TextureEditorWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureEditorWidget.h; sourceTree = ""; }; - 0115A6431DBF93BA00C51732 /* TextureHighlightWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureHighlightWidget.cpp; sourceTree = ""; }; - 0115A6441DBF93BA00C51732 /* TextureHighlightWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureHighlightWidget.h; sourceTree = ""; }; - 0115A6461DBF93BA00C51732 /* Info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Info.cpp; sourceTree = ""; }; - 0115A6471DBF93BA00C51732 /* Info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Info.h; sourceTree = ""; }; - 0115A6491DBF93BA00C51732 /* DirectoryWatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryWatcher.cpp; sourceTree = ""; }; - 0115A64A1DBF93BA00C51732 /* DirectoryWatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectoryWatcher.h; sourceTree = ""; }; - 0115A64B1DBF93BA00C51732 /* MediaServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaServer.cpp; sourceTree = ""; }; - 0115A64C1DBF93BA00C51732 /* MediaServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaServer.h; sourceTree = ""; }; - 0115A64D1DBF93BA00C51732 /* ofxPiMapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPiMapper.cpp; sourceTree = ""; }; - 0115A64E1DBF93BA00C51732 /* ofxPiMapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxPiMapper.h; sourceTree = ""; }; - 0115A6501DBF93BA00C51732 /* BaseSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSource.cpp; sourceTree = ""; }; - 0115A6511DBF93BA00C51732 /* BaseSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseSource.h; sourceTree = ""; }; - 0115A6521DBF93BA00C51732 /* FboSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FboSource.cpp; sourceTree = ""; }; - 0115A6531DBF93BA00C51732 /* FboSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FboSource.h; sourceTree = ""; }; - 0115A6541DBF93BA00C51732 /* ImageSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageSource.cpp; sourceTree = ""; }; - 0115A6551DBF93BA00C51732 /* ImageSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageSource.h; sourceTree = ""; }; - 0115A6561DBF93BA00C51732 /* OMXPlayerCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OMXPlayerCache.cpp; sourceTree = ""; }; - 0115A6571DBF93BA00C51732 /* OMXPlayerCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OMXPlayerCache.h; sourceTree = ""; }; - 0115A6581DBF93BA00C51732 /* SourceType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceType.h; sourceTree = ""; }; - 0115A6591DBF93BA00C51732 /* VideoSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VideoSource.cpp; sourceTree = ""; }; - 0115A65A1DBF93BA00C51732 /* VideoSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoSource.h; sourceTree = ""; }; - 0115A65C1DBF93BA00C51732 /* BaseSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSurface.cpp; sourceTree = ""; }; - 0115A65D1DBF93BA00C51732 /* BaseSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseSurface.h; sourceTree = ""; }; - 0115A65E1DBF93BA00C51732 /* GridWarpSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GridWarpSurface.cpp; sourceTree = ""; }; - 0115A65F1DBF93BA00C51732 /* GridWarpSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GridWarpSurface.h; sourceTree = ""; }; - 0115A6601DBF93BA00C51732 /* HexagonSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HexagonSurface.cpp; sourceTree = ""; }; - 0115A6611DBF93BA00C51732 /* HexagonSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HexagonSurface.h; sourceTree = ""; }; - 0115A6621DBF93BA00C51732 /* QuadSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QuadSurface.cpp; sourceTree = ""; }; - 0115A6631DBF93BA00C51732 /* QuadSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuadSurface.h; sourceTree = ""; }; - 0115A6641DBF93BA00C51732 /* SurfaceFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceFactory.cpp; sourceTree = ""; }; - 0115A6651DBF93BA00C51732 /* SurfaceFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceFactory.h; sourceTree = ""; }; - 0115A6661DBF93BA00C51732 /* SurfaceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceManager.cpp; sourceTree = ""; }; - 0115A6671DBF93BA00C51732 /* SurfaceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceManager.h; sourceTree = ""; }; - 0115A6681DBF93BA00C51732 /* SurfaceStack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceStack.cpp; sourceTree = ""; }; - 0115A6691DBF93BA00C51732 /* SurfaceStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceStack.h; sourceTree = ""; }; - 0115A66A1DBF93BA00C51732 /* SurfaceType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceType.h; sourceTree = ""; }; - 0115A66B1DBF93BA00C51732 /* TriangleSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TriangleSurface.cpp; sourceTree = ""; }; - 0115A66C1DBF93BA00C51732 /* TriangleSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TriangleSurface.h; sourceTree = ""; }; - 0115A66E1DBF93BA00C51732 /* BaseJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseJoint.cpp; sourceTree = ""; }; - 0115A66F1DBF93BA00C51732 /* BaseJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseJoint.h; sourceTree = ""; }; - 0115A6701DBF93BA00C51732 /* CircleJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleJoint.cpp; sourceTree = ""; }; - 0115A6711DBF93BA00C51732 /* CircleJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleJoint.h; sourceTree = ""; }; - 0115A6721DBF93BA00C51732 /* EditorType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditorType.h; sourceTree = ""; }; - 0115A6731DBF93BA00C51732 /* GuiMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GuiMode.h; sourceTree = ""; }; - 0115A6741DBF93BA00C51732 /* RadioList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RadioList.cpp; sourceTree = ""; }; - 0115A6751DBF93BA00C51732 /* RadioList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RadioList.h; sourceTree = ""; }; - 0115A6771DBF93BA00C51732 /* HomographyHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HomographyHelper.cpp; sourceTree = ""; }; - 0115A6781DBF93BA00C51732 /* HomographyHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomographyHelper.h; sourceTree = ""; }; - 0166303D1DC66DAB0081F28F /* AddGridColCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridColCmd.cpp; sourceTree = ""; }; - 0166303E1DC66DAB0081F28F /* AddGridColCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddGridColCmd.h; sourceTree = ""; }; - 0166303F1DC66DAB0081F28F /* AddGridRowCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridRowCmd.cpp; sourceTree = ""; }; - 016630401DC66DAB0081F28F /* AddGridRowCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddGridRowCmd.h; sourceTree = ""; }; - 016630411DC66DAB0081F28F /* AddSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddSurfaceCmd.cpp; sourceTree = ""; }; - 016630421DC66DAB0081F28F /* AddSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddSurfaceCmd.h; sourceTree = ""; }; - 016630431DC66DAB0081F28F /* BaseCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseCmd.h; sourceTree = ""; }; - 016630441DC66DAB0081F28F /* ClearSurfacesCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ClearSurfacesCmd.cpp; sourceTree = ""; }; - 016630451DC66DAB0081F28F /* ClearSurfacesCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClearSurfacesCmd.h; sourceTree = ""; }; - 016630461DC66DAB0081F28F /* CmdManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CmdManager.cpp; sourceTree = ""; }; - 016630471DC66DAB0081F28F /* CmdManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CmdManager.h; sourceTree = ""; }; - 016630481DC66DAB0081F28F /* DeselectSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectSurfaceCmd.cpp; sourceTree = ""; }; - 016630491DC66DAB0081F28F /* DeselectSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeselectSurfaceCmd.h; sourceTree = ""; }; - 0166304A1DC66DAB0081F28F /* DeselectTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectTexCoordCmd.cpp; sourceTree = ""; }; - 0166304B1DC66DAB0081F28F /* DeselectTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeselectTexCoordCmd.h; sourceTree = ""; }; - 0166304C1DC66DAB0081F28F /* DuplicateSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DuplicateSurfaceCmd.cpp; sourceTree = ""; }; - 0166304D1DC66DAB0081F28F /* DuplicateSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DuplicateSurfaceCmd.h; sourceTree = ""; }; - 0166304E1DC66DAB0081F28F /* MvAllTexCoordsCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvAllTexCoordsCmd.cpp; sourceTree = ""; }; - 0166304F1DC66DAB0081F28F /* MvAllTexCoordsCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvAllTexCoordsCmd.h; sourceTree = ""; }; - 016630501DC66DAB0081F28F /* MvLayerDnCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerDnCmd.cpp; sourceTree = ""; }; - 016630511DC66DAB0081F28F /* MvLayerDnCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvLayerDnCmd.h; sourceTree = ""; }; - 016630521DC66DAB0081F28F /* MvLayerUpCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerUpCmd.cpp; sourceTree = ""; }; - 016630531DC66DAB0081F28F /* MvLayerUpCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvLayerUpCmd.h; sourceTree = ""; }; - 016630541DC66DAB0081F28F /* MvSelectionCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvSelectionCmd.cpp; sourceTree = ""; }; - 016630551DC66DAB0081F28F /* MvSelectionCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvSelectionCmd.h; sourceTree = ""; }; - 016630561DC66DAB0081F28F /* MvSurfaceVertCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvSurfaceVertCmd.cpp; sourceTree = ""; }; - 016630571DC66DAB0081F28F /* MvSurfaceVertCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvSurfaceVertCmd.h; sourceTree = ""; }; - 016630581DC66DAB0081F28F /* MvTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvTexCoordCmd.cpp; sourceTree = ""; }; - 016630591DC66DAB0081F28F /* MvTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvTexCoordCmd.h; sourceTree = ""; }; - 0166305A1DC66DAB0081F28F /* RmGridColCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridColCmd.cpp; sourceTree = ""; }; - 0166305B1DC66DAB0081F28F /* RmGridColCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RmGridColCmd.h; sourceTree = ""; }; - 0166305C1DC66DAB0081F28F /* RmGridRowCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridRowCmd.cpp; sourceTree = ""; }; - 0166305D1DC66DAB0081F28F /* RmGridRowCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RmGridRowCmd.h; sourceTree = ""; }; - 0166305E1DC66DAB0081F28F /* RmSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RmSurfaceCmd.cpp; sourceTree = ""; }; - 0166305F1DC66DAB0081F28F /* RmSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RmSurfaceCmd.h; sourceTree = ""; }; - 016630601DC66DAB0081F28F /* SaveTexCoordPosCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SaveTexCoordPosCmd.cpp; sourceTree = ""; }; - 016630611DC66DAB0081F28F /* SaveTexCoordPosCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaveTexCoordPosCmd.h; sourceTree = ""; }; - 016630621DC66DAB0081F28F /* ScaleSurfaceFromToCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleSurfaceFromToCmd.cpp; sourceTree = ""; }; - 016630631DC66DAB0081F28F /* ScaleSurfaceFromToCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScaleSurfaceFromToCmd.h; sourceTree = ""; }; - 016630641DC66DAB0081F28F /* SelNextSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextSurfaceCmd.cpp; sourceTree = ""; }; - 016630651DC66DAB0081F28F /* SelNextSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelNextSurfaceCmd.h; sourceTree = ""; }; - 016630661DC66DAB0081F28F /* SelNextTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextTexCoordCmd.cpp; sourceTree = ""; }; - 016630671DC66DAB0081F28F /* SelNextTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelNextTexCoordCmd.h; sourceTree = ""; }; - 016630681DC66DAB0081F28F /* SelNextVertexCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextVertexCmd.cpp; sourceTree = ""; }; - 016630691DC66DAB0081F28F /* SelNextVertexCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelNextVertexCmd.h; sourceTree = ""; }; - 0166306A1DC66DAB0081F28F /* SelPrevSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevSurfaceCmd.cpp; sourceTree = ""; }; - 0166306B1DC66DAB0081F28F /* SelPrevSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelPrevSurfaceCmd.h; sourceTree = ""; }; - 0166306C1DC66DAB0081F28F /* SelPrevTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevTexCoordCmd.cpp; sourceTree = ""; }; - 0166306D1DC66DAB0081F28F /* SelPrevTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelPrevTexCoordCmd.h; sourceTree = ""; }; - 0166306E1DC66DAB0081F28F /* SelPrevVertexCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevVertexCmd.cpp; sourceTree = ""; }; - 0166306F1DC66DAB0081F28F /* SelPrevVertexCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelPrevVertexCmd.h; sourceTree = ""; }; - 016630701DC66DAB0081F28F /* SelSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelSurfaceCmd.cpp; sourceTree = ""; }; - 016630711DC66DAB0081F28F /* SelSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelSurfaceCmd.h; sourceTree = ""; }; - 016630721DC66DAB0081F28F /* SelTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelTexCoordCmd.cpp; sourceTree = ""; }; - 016630731DC66DAB0081F28F /* SelTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelTexCoordCmd.h; sourceTree = ""; }; - 016630741DC66DAB0081F28F /* SelVertexCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelVertexCmd.cpp; sourceTree = ""; }; - 016630751DC66DAB0081F28F /* SelVertexCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelVertexCmd.h; sourceTree = ""; }; - 016630761DC66DAB0081F28F /* SetApplicationModeCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetApplicationModeCmd.cpp; sourceTree = ""; }; - 016630771DC66DAB0081F28F /* SetApplicationModeCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetApplicationModeCmd.h; sourceTree = ""; }; - 016630781DC66DAB0081F28F /* SetNextSourceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetNextSourceCmd.cpp; sourceTree = ""; }; - 016630791DC66DAB0081F28F /* SetNextSourceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetNextSourceCmd.h; sourceTree = ""; }; - 0166307A1DC66DAB0081F28F /* SetPresetCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetPresetCmd.cpp; sourceTree = ""; }; - 0166307B1DC66DAB0081F28F /* SetPresetCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetPresetCmd.h; sourceTree = ""; }; - 0166307C1DC66DAB0081F28F /* SetSourceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetSourceCmd.cpp; sourceTree = ""; }; - 0166307D1DC66DAB0081F28F /* SetSourceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetSourceCmd.h; sourceTree = ""; }; - 0166307E1DC66DAB0081F28F /* SetTexMapDrawModeCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetTexMapDrawModeCmd.cpp; sourceTree = ""; }; - 0166307F1DC66DAB0081F28F /* SetTexMapDrawModeCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetTexMapDrawModeCmd.h; sourceTree = ""; }; - 016630801DC66DAB0081F28F /* StartDragSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StartDragSurfaceCmd.cpp; sourceTree = ""; }; - 016630811DC66DAB0081F28F /* StartDragSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StartDragSurfaceCmd.h; sourceTree = ""; }; - 016630821DC66DAB0081F28F /* ToggleAnimatedSourceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ToggleAnimatedSourceCmd.cpp; sourceTree = ""; }; - 016630831DC66DAB0081F28F /* ToggleAnimatedSourceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToggleAnimatedSourceCmd.h; sourceTree = ""; }; - 016630841DC66DAB0081F28F /* TogglePerspectiveCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TogglePerspectiveCmd.cpp; sourceTree = ""; }; - 016630851DC66DAB0081F28F /* TogglePerspectiveCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TogglePerspectiveCmd.h; sourceTree = ""; }; - 016630861DC66DAB0081F28F /* TranslateCanvasCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TranslateCanvasCmd.cpp; sourceTree = ""; }; - 016630871DC66DAB0081F28F /* TranslateCanvasCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TranslateCanvasCmd.h; sourceTree = ""; }; + 01815DE01FE7D53700C35E93 /* Application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Application.cpp; sourceTree = ""; }; + 01815DE11FE7D53700C35E93 /* Application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Application.h; sourceTree = ""; }; + 01815DE31FE7D53700C35E93 /* ApplicationBaseMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ApplicationBaseMode.cpp; sourceTree = ""; }; + 01815DE41FE7D53700C35E93 /* ApplicationBaseMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApplicationBaseMode.h; sourceTree = ""; }; + 01815DE51FE7D53700C35E93 /* PresentationMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PresentationMode.cpp; sourceTree = ""; }; + 01815DE61FE7D53700C35E93 /* PresentationMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PresentationMode.h; sourceTree = ""; }; + 01815DE71FE7D53700C35E93 /* ProjectionMappingMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionMappingMode.cpp; sourceTree = ""; }; + 01815DE81FE7D53700C35E93 /* ProjectionMappingMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProjectionMappingMode.h; sourceTree = ""; }; + 01815DE91FE7D53700C35E93 /* SourceSelectionMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SourceSelectionMode.cpp; sourceTree = ""; }; + 01815DEA1FE7D53700C35E93 /* SourceSelectionMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourceSelectionMode.h; sourceTree = ""; }; + 01815DEB1FE7D53700C35E93 /* TextureMappingMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureMappingMode.cpp; sourceTree = ""; }; + 01815DEC1FE7D53700C35E93 /* TextureMappingMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureMappingMode.h; sourceTree = ""; }; + 01815DED1FE7D53700C35E93 /* SettingsLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SettingsLoader.cpp; sourceTree = ""; }; + 01815DEE1FE7D53700C35E93 /* SettingsLoader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SettingsLoader.h; sourceTree = ""; }; + 01815DF01FE7D53700C35E93 /* AddGridColCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridColCmd.cpp; sourceTree = ""; }; + 01815DF11FE7D53700C35E93 /* AddGridColCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddGridColCmd.h; sourceTree = ""; }; + 01815DF21FE7D53700C35E93 /* AddGridRowCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridRowCmd.cpp; sourceTree = ""; }; + 01815DF31FE7D53700C35E93 /* AddGridRowCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddGridRowCmd.h; sourceTree = ""; }; + 01815DF41FE7D53700C35E93 /* AddSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AddSurfaceCmd.cpp; sourceTree = ""; }; + 01815DF51FE7D53700C35E93 /* AddSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddSurfaceCmd.h; sourceTree = ""; }; + 01815DF61FE7D53700C35E93 /* BaseCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseCmd.h; sourceTree = ""; }; + 01815DF71FE7D53700C35E93 /* ClearSurfacesCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ClearSurfacesCmd.cpp; sourceTree = ""; }; + 01815DF81FE7D53700C35E93 /* ClearSurfacesCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClearSurfacesCmd.h; sourceTree = ""; }; + 01815DF91FE7D53700C35E93 /* CmdManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CmdManager.cpp; sourceTree = ""; }; + 01815DFA1FE7D53700C35E93 /* CmdManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CmdManager.h; sourceTree = ""; }; + 01815DFB1FE7D53700C35E93 /* DeselectSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectSurfaceCmd.cpp; sourceTree = ""; }; + 01815DFC1FE7D53700C35E93 /* DeselectSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeselectSurfaceCmd.h; sourceTree = ""; }; + 01815DFD1FE7D53700C35E93 /* DeselectTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectTexCoordCmd.cpp; sourceTree = ""; }; + 01815DFE1FE7D53700C35E93 /* DeselectTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeselectTexCoordCmd.h; sourceTree = ""; }; + 01815DFF1FE7D53700C35E93 /* DuplicateSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DuplicateSurfaceCmd.cpp; sourceTree = ""; }; + 01815E001FE7D53700C35E93 /* DuplicateSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DuplicateSurfaceCmd.h; sourceTree = ""; }; + 01815E011FE7D53700C35E93 /* MvAllTexCoordsCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvAllTexCoordsCmd.cpp; sourceTree = ""; }; + 01815E021FE7D53700C35E93 /* MvAllTexCoordsCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvAllTexCoordsCmd.h; sourceTree = ""; }; + 01815E031FE7D53700C35E93 /* MvLayerDnCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerDnCmd.cpp; sourceTree = ""; }; + 01815E041FE7D53700C35E93 /* MvLayerDnCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvLayerDnCmd.h; sourceTree = ""; }; + 01815E051FE7D53700C35E93 /* MvLayerUpCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerUpCmd.cpp; sourceTree = ""; }; + 01815E061FE7D53700C35E93 /* MvLayerUpCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvLayerUpCmd.h; sourceTree = ""; }; + 01815E071FE7D53700C35E93 /* MvSelectionCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvSelectionCmd.cpp; sourceTree = ""; }; + 01815E081FE7D53700C35E93 /* MvSelectionCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvSelectionCmd.h; sourceTree = ""; }; + 01815E091FE7D53700C35E93 /* MvSurfaceVertCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvSurfaceVertCmd.cpp; sourceTree = ""; }; + 01815E0A1FE7D53700C35E93 /* MvSurfaceVertCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvSurfaceVertCmd.h; sourceTree = ""; }; + 01815E0B1FE7D53700C35E93 /* MvTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvTexCoordCmd.cpp; sourceTree = ""; }; + 01815E0C1FE7D53700C35E93 /* MvTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvTexCoordCmd.h; sourceTree = ""; }; + 01815E0D1FE7D53700C35E93 /* RmGridColCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridColCmd.cpp; sourceTree = ""; }; + 01815E0E1FE7D53700C35E93 /* RmGridColCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RmGridColCmd.h; sourceTree = ""; }; + 01815E0F1FE7D53700C35E93 /* RmGridRowCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridRowCmd.cpp; sourceTree = ""; }; + 01815E101FE7D53700C35E93 /* RmGridRowCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RmGridRowCmd.h; sourceTree = ""; }; + 01815E111FE7D53700C35E93 /* RmSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RmSurfaceCmd.cpp; sourceTree = ""; }; + 01815E121FE7D53700C35E93 /* RmSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RmSurfaceCmd.h; sourceTree = ""; }; + 01815E131FE7D53700C35E93 /* SaveTexCoordPosCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SaveTexCoordPosCmd.cpp; sourceTree = ""; }; + 01815E141FE7D53700C35E93 /* SaveTexCoordPosCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SaveTexCoordPosCmd.h; sourceTree = ""; }; + 01815E151FE7D53700C35E93 /* ScaleSurfaceFromToCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleSurfaceFromToCmd.cpp; sourceTree = ""; }; + 01815E161FE7D53700C35E93 /* ScaleSurfaceFromToCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScaleSurfaceFromToCmd.h; sourceTree = ""; }; + 01815E171FE7D53700C35E93 /* SelNextSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextSurfaceCmd.cpp; sourceTree = ""; }; + 01815E181FE7D53700C35E93 /* SelNextSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelNextSurfaceCmd.h; sourceTree = ""; }; + 01815E191FE7D53700C35E93 /* SelNextTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextTexCoordCmd.cpp; sourceTree = ""; }; + 01815E1A1FE7D53700C35E93 /* SelNextTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelNextTexCoordCmd.h; sourceTree = ""; }; + 01815E1B1FE7D53700C35E93 /* SelNextVertexCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextVertexCmd.cpp; sourceTree = ""; }; + 01815E1C1FE7D53700C35E93 /* SelNextVertexCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelNextVertexCmd.h; sourceTree = ""; }; + 01815E1D1FE7D53700C35E93 /* SelPrevSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevSurfaceCmd.cpp; sourceTree = ""; }; + 01815E1E1FE7D53700C35E93 /* SelPrevSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelPrevSurfaceCmd.h; sourceTree = ""; }; + 01815E1F1FE7D53700C35E93 /* SelPrevTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevTexCoordCmd.cpp; sourceTree = ""; }; + 01815E201FE7D53700C35E93 /* SelPrevTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelPrevTexCoordCmd.h; sourceTree = ""; }; + 01815E211FE7D53700C35E93 /* SelPrevVertexCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevVertexCmd.cpp; sourceTree = ""; }; + 01815E221FE7D53700C35E93 /* SelPrevVertexCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelPrevVertexCmd.h; sourceTree = ""; }; + 01815E231FE7D53700C35E93 /* SelSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelSurfaceCmd.cpp; sourceTree = ""; }; + 01815E241FE7D53700C35E93 /* SelSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelSurfaceCmd.h; sourceTree = ""; }; + 01815E251FE7D53700C35E93 /* SelTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelTexCoordCmd.cpp; sourceTree = ""; }; + 01815E261FE7D53700C35E93 /* SelTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelTexCoordCmd.h; sourceTree = ""; }; + 01815E271FE7D53700C35E93 /* SelVertexCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelVertexCmd.cpp; sourceTree = ""; }; + 01815E281FE7D53700C35E93 /* SelVertexCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelVertexCmd.h; sourceTree = ""; }; + 01815E291FE7D53700C35E93 /* SetApplicationModeCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetApplicationModeCmd.cpp; sourceTree = ""; }; + 01815E2A1FE7D53700C35E93 /* SetApplicationModeCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetApplicationModeCmd.h; sourceTree = ""; }; + 01815E2B1FE7D53700C35E93 /* SetNextSourceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetNextSourceCmd.cpp; sourceTree = ""; }; + 01815E2C1FE7D53700C35E93 /* SetNextSourceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetNextSourceCmd.h; sourceTree = ""; }; + 01815E2D1FE7D53700C35E93 /* SetPresetCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetPresetCmd.cpp; sourceTree = ""; }; + 01815E2E1FE7D53700C35E93 /* SetPresetCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetPresetCmd.h; sourceTree = ""; }; + 01815E2F1FE7D53700C35E93 /* SetSourceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetSourceCmd.cpp; sourceTree = ""; }; + 01815E301FE7D53700C35E93 /* SetSourceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetSourceCmd.h; sourceTree = ""; }; + 01815E311FE7D53700C35E93 /* SetTexMapDrawModeCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetTexMapDrawModeCmd.cpp; sourceTree = ""; }; + 01815E321FE7D53700C35E93 /* SetTexMapDrawModeCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetTexMapDrawModeCmd.h; sourceTree = ""; }; + 01815E331FE7D53700C35E93 /* StartDragSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = StartDragSurfaceCmd.cpp; sourceTree = ""; }; + 01815E341FE7D53700C35E93 /* StartDragSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StartDragSurfaceCmd.h; sourceTree = ""; }; + 01815E351FE7D53700C35E93 /* ToggleAnimatedSourceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ToggleAnimatedSourceCmd.cpp; sourceTree = ""; }; + 01815E361FE7D53700C35E93 /* ToggleAnimatedSourceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ToggleAnimatedSourceCmd.h; sourceTree = ""; }; + 01815E371FE7D53700C35E93 /* TogglePerspectiveCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TogglePerspectiveCmd.cpp; sourceTree = ""; }; + 01815E381FE7D53700C35E93 /* TogglePerspectiveCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TogglePerspectiveCmd.h; sourceTree = ""; }; + 01815E391FE7D53700C35E93 /* TranslateCanvasCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TranslateCanvasCmd.cpp; sourceTree = ""; }; + 01815E3A1FE7D53700C35E93 /* TranslateCanvasCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TranslateCanvasCmd.h; sourceTree = ""; }; + 01815E3C1FE7D53700C35E93 /* Gui.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Gui.cpp; sourceTree = ""; }; + 01815E3D1FE7D53700C35E93 /* Gui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Gui.h; sourceTree = ""; }; + 01815E3F1FE7D53700C35E93 /* GuiBaseWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GuiBaseWidget.h; sourceTree = ""; }; + 01815E401FE7D53700C35E93 /* LayerPanelWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LayerPanelWidget.cpp; sourceTree = ""; }; + 01815E411FE7D53700C35E93 /* LayerPanelWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LayerPanelWidget.h; sourceTree = ""; }; + 01815E421FE7D53700C35E93 /* ProjectionEditorWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionEditorWidget.cpp; sourceTree = ""; }; + 01815E431FE7D53700C35E93 /* ProjectionEditorWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProjectionEditorWidget.h; sourceTree = ""; }; + 01815E441FE7D53700C35E93 /* ScaleWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleWidget.cpp; sourceTree = ""; }; + 01815E451FE7D53700C35E93 /* ScaleWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScaleWidget.h; sourceTree = ""; }; + 01815E461FE7D53700C35E93 /* SourcesEditorWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SourcesEditorWidget.cpp; sourceTree = ""; }; + 01815E471FE7D53700C35E93 /* SourcesEditorWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourcesEditorWidget.h; sourceTree = ""; }; + 01815E481FE7D53700C35E93 /* SurfaceHighlightWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceHighlightWidget.cpp; sourceTree = ""; }; + 01815E491FE7D53700C35E93 /* SurfaceHighlightWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceHighlightWidget.h; sourceTree = ""; }; + 01815E4A1FE7D53700C35E93 /* TextureEditorWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureEditorWidget.cpp; sourceTree = ""; }; + 01815E4B1FE7D53700C35E93 /* TextureEditorWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureEditorWidget.h; sourceTree = ""; }; + 01815E4C1FE7D53700C35E93 /* TextureHighlightWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureHighlightWidget.cpp; sourceTree = ""; }; + 01815E4D1FE7D53700C35E93 /* TextureHighlightWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureHighlightWidget.h; sourceTree = ""; }; + 01815E4F1FE7D53700C35E93 /* Info.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Info.cpp; sourceTree = ""; }; + 01815E501FE7D53700C35E93 /* Info.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Info.h; sourceTree = ""; }; + 01815E521FE7D53700C35E93 /* DirectoryWatcher.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryWatcher.cpp; sourceTree = ""; }; + 01815E531FE7D53700C35E93 /* DirectoryWatcher.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DirectoryWatcher.h; sourceTree = ""; }; + 01815E541FE7D53700C35E93 /* MediaServer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MediaServer.cpp; sourceTree = ""; }; + 01815E551FE7D53700C35E93 /* MediaServer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaServer.h; sourceTree = ""; }; + 01815E561FE7D53700C35E93 /* Mode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Mode.h; sourceTree = ""; }; + 01815E571FE7D53700C35E93 /* ofxPiMapper.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPiMapper.cpp; sourceTree = ""; }; + 01815E581FE7D53700C35E93 /* ofxPiMapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxPiMapper.h; sourceTree = ""; }; + 01815E5A1FE7D53700C35E93 /* BaseSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSource.cpp; sourceTree = ""; }; + 01815E5B1FE7D53700C35E93 /* BaseSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseSource.h; sourceTree = ""; }; + 01815E5C1FE7D53700C35E93 /* FboSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FboSource.cpp; sourceTree = ""; }; + 01815E5D1FE7D53700C35E93 /* FboSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FboSource.h; sourceTree = ""; }; + 01815E5E1FE7D53700C35E93 /* ImageSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ImageSource.cpp; sourceTree = ""; }; + 01815E5F1FE7D53700C35E93 /* ImageSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageSource.h; sourceTree = ""; }; + 01815E601FE7D53700C35E93 /* magSlide.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlide.cpp; sourceTree = ""; }; + 01815E611FE7D53700C35E93 /* magSlide.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlide.h; sourceTree = ""; }; + 01815E621FE7D53700C35E93 /* magSlideShowSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlideShowSource.cpp; sourceTree = ""; }; + 01815E631FE7D53700C35E93 /* magSlideShowSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlideShowSource.h; sourceTree = ""; }; + 01815E641FE7D53700C35E93 /* magSlideTransition.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlideTransition.cpp; sourceTree = ""; }; + 01815E651FE7D53700C35E93 /* magSlideTransition.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlideTransition.h; sourceTree = ""; }; + 01815E661FE7D53700C35E93 /* magSlideTransitionFactory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlideTransitionFactory.cpp; sourceTree = ""; }; + 01815E671FE7D53700C35E93 /* magSlideTransitionFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlideTransitionFactory.h; sourceTree = ""; }; + 01815E681FE7D53700C35E93 /* OMXPlayerCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = OMXPlayerCache.cpp; sourceTree = ""; }; + 01815E691FE7D53700C35E93 /* OMXPlayerCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OMXPlayerCache.h; sourceTree = ""; }; + 01815E6A1FE7D53700C35E93 /* SourceType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourceType.h; sourceTree = ""; }; + 01815E6B1FE7D53700C35E93 /* SourceTypeHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourceTypeHelper.h; sourceTree = ""; }; + 01815E6C1FE7D53700C35E93 /* VideoSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = VideoSource.cpp; sourceTree = ""; }; + 01815E6D1FE7D53700C35E93 /* VideoSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VideoSource.h; sourceTree = ""; }; + 01815E6F1FE7D53700C35E93 /* BaseSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSurface.cpp; sourceTree = ""; }; + 01815E701FE7D53700C35E93 /* BaseSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseSurface.h; sourceTree = ""; }; + 01815E711FE7D53700C35E93 /* GridWarpSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GridWarpSurface.cpp; sourceTree = ""; }; + 01815E721FE7D53700C35E93 /* GridWarpSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GridWarpSurface.h; sourceTree = ""; }; + 01815E731FE7D53700C35E93 /* HexagonSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HexagonSurface.cpp; sourceTree = ""; }; + 01815E741FE7D53700C35E93 /* HexagonSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HexagonSurface.h; sourceTree = ""; }; + 01815E751FE7D53700C35E93 /* QuadSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = QuadSurface.cpp; sourceTree = ""; }; + 01815E761FE7D53700C35E93 /* QuadSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QuadSurface.h; sourceTree = ""; }; + 01815E771FE7D53700C35E93 /* SurfaceFactory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceFactory.cpp; sourceTree = ""; }; + 01815E781FE7D53700C35E93 /* SurfaceFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceFactory.h; sourceTree = ""; }; + 01815E791FE7D53700C35E93 /* SurfaceManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceManager.cpp; sourceTree = ""; }; + 01815E7A1FE7D53700C35E93 /* SurfaceManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceManager.h; sourceTree = ""; }; + 01815E7B1FE7D53700C35E93 /* SurfaceStack.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceStack.cpp; sourceTree = ""; }; + 01815E7C1FE7D53700C35E93 /* SurfaceStack.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceStack.h; sourceTree = ""; }; + 01815E7D1FE7D53700C35E93 /* SurfaceType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceType.h; sourceTree = ""; }; + 01815E7E1FE7D53700C35E93 /* TriangleSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TriangleSurface.cpp; sourceTree = ""; }; + 01815E7F1FE7D53700C35E93 /* TriangleSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TriangleSurface.h; sourceTree = ""; }; + 01815E811FE7D53700C35E93 /* BaseJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BaseJoint.cpp; sourceTree = ""; }; + 01815E821FE7D53700C35E93 /* BaseJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseJoint.h; sourceTree = ""; }; + 01815E831FE7D53700C35E93 /* CircleJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CircleJoint.cpp; sourceTree = ""; }; + 01815E841FE7D53700C35E93 /* CircleJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CircleJoint.h; sourceTree = ""; }; + 01815E851FE7D53700C35E93 /* EditorType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EditorType.h; sourceTree = ""; }; + 01815E861FE7D53700C35E93 /* GuiMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GuiMode.h; sourceTree = ""; }; + 01815E871FE7D53700C35E93 /* RadioList.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RadioList.cpp; sourceTree = ""; }; + 01815E881FE7D53700C35E93 /* RadioList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RadioList.h; sourceTree = ""; }; + 01815E8A1FE7D53700C35E93 /* HomographyHelper.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HomographyHelper.cpp; sourceTree = ""; }; + 01815E8B1FE7D53700C35E93 /* HomographyHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomographyHelper.h; sourceTree = ""; }; 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ofxXmlSettings.cpp; path = ../../ofxXmlSettings/src/ofxXmlSettings.cpp; sourceTree = ""; }; 3926483A192224DA0008A7F5 /* ofxXmlSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ofxXmlSettings.h; path = ../../ofxXmlSettings/src/ofxXmlSettings.h; sourceTree = ""; }; 3926483D192224F90008A7F5 /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = ""; }; @@ -379,255 +392,264 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0115A5D71DBF93BA00C51732 /* src */ = { + 01815DDE1FE7D53700C35E93 /* src */ = { isa = PBXGroup; children = ( - 0115A5D81DBF93BA00C51732 /* Application */, - 0166303C1DC66DAB0081F28F /* Commands */, - 0115A6301DBF93BA00C51732 /* Gui */, - 0115A6451DBF93BA00C51732 /* Info */, - 0115A6481DBF93BA00C51732 /* MediaServer */, - 0115A64D1DBF93BA00C51732 /* ofxPiMapper.cpp */, - 0115A64E1DBF93BA00C51732 /* ofxPiMapper.h */, - 0100D9401E33E667000D7FA5 /* Mode.h */, - 0115A64F1DBF93BA00C51732 /* Sources */, - 0115A65B1DBF93BA00C51732 /* Surfaces */, - 0115A66D1DBF93BA00C51732 /* UserInterface */, - 0115A6761DBF93BA00C51732 /* Utils */, + 01815DDF1FE7D53700C35E93 /* Application */, + 01815DEF1FE7D53700C35E93 /* Commands */, + 01815E3B1FE7D53700C35E93 /* Gui */, + 01815E4E1FE7D53700C35E93 /* Info */, + 01815E511FE7D53700C35E93 /* MediaServer */, + 01815E561FE7D53700C35E93 /* Mode.h */, + 01815E571FE7D53700C35E93 /* ofxPiMapper.cpp */, + 01815E581FE7D53700C35E93 /* ofxPiMapper.h */, + 01815E591FE7D53700C35E93 /* Sources */, + 01815E6E1FE7D53700C35E93 /* Surfaces */, + 01815E801FE7D53700C35E93 /* UserInterface */, + 01815E891FE7D53700C35E93 /* Utils */, ); name = src; path = ../src; sourceTree = ""; }; - 0115A5D81DBF93BA00C51732 /* Application */ = { + 01815DDF1FE7D53700C35E93 /* Application */ = { isa = PBXGroup; children = ( - 0115A5D91DBF93BA00C51732 /* Application.cpp */, - 0115A5DA1DBF93BA00C51732 /* Application.h */, - 0115A5DB1DBF93BA00C51732 /* Modes */, - 0115A5E61DBF93BA00C51732 /* SettingsLoader.cpp */, - 0115A5E71DBF93BA00C51732 /* SettingsLoader.h */, + 01815DE01FE7D53700C35E93 /* Application.cpp */, + 01815DE11FE7D53700C35E93 /* Application.h */, + 01815DE21FE7D53700C35E93 /* Modes */, + 01815DED1FE7D53700C35E93 /* SettingsLoader.cpp */, + 01815DEE1FE7D53700C35E93 /* SettingsLoader.h */, ); path = Application; sourceTree = ""; }; - 0115A5DB1DBF93BA00C51732 /* Modes */ = { + 01815DE21FE7D53700C35E93 /* Modes */ = { isa = PBXGroup; children = ( - 0115A5DC1DBF93BA00C51732 /* ApplicationBaseMode.cpp */, - 0115A5DD1DBF93BA00C51732 /* ApplicationBaseMode.h */, - 0115A5DE1DBF93BA00C51732 /* PresentationMode.cpp */, - 0115A5DF1DBF93BA00C51732 /* PresentationMode.h */, - 0115A5E01DBF93BA00C51732 /* ProjectionMappingMode.cpp */, - 0115A5E11DBF93BA00C51732 /* ProjectionMappingMode.h */, - 0115A5E21DBF93BA00C51732 /* SourceSelectionMode.cpp */, - 0115A5E31DBF93BA00C51732 /* SourceSelectionMode.h */, - 0115A5E41DBF93BA00C51732 /* TextureMappingMode.cpp */, - 0115A5E51DBF93BA00C51732 /* TextureMappingMode.h */, + 01815DE31FE7D53700C35E93 /* ApplicationBaseMode.cpp */, + 01815DE41FE7D53700C35E93 /* ApplicationBaseMode.h */, + 01815DE51FE7D53700C35E93 /* PresentationMode.cpp */, + 01815DE61FE7D53700C35E93 /* PresentationMode.h */, + 01815DE71FE7D53700C35E93 /* ProjectionMappingMode.cpp */, + 01815DE81FE7D53700C35E93 /* ProjectionMappingMode.h */, + 01815DE91FE7D53700C35E93 /* SourceSelectionMode.cpp */, + 01815DEA1FE7D53700C35E93 /* SourceSelectionMode.h */, + 01815DEB1FE7D53700C35E93 /* TextureMappingMode.cpp */, + 01815DEC1FE7D53700C35E93 /* TextureMappingMode.h */, ); path = Modes; sourceTree = ""; }; - 0115A6301DBF93BA00C51732 /* Gui */ = { + 01815DEF1FE7D53700C35E93 /* Commands */ = { isa = PBXGroup; children = ( - 0115A6311DBF93BA00C51732 /* Gui.cpp */, - 0115A6321DBF93BA00C51732 /* Gui.h */, - 0115A6331DBF93BA00C51732 /* Widgets */, + 01815DF01FE7D53700C35E93 /* AddGridColCmd.cpp */, + 01815DF11FE7D53700C35E93 /* AddGridColCmd.h */, + 01815DF21FE7D53700C35E93 /* AddGridRowCmd.cpp */, + 01815DF31FE7D53700C35E93 /* AddGridRowCmd.h */, + 01815DF41FE7D53700C35E93 /* AddSurfaceCmd.cpp */, + 01815DF51FE7D53700C35E93 /* AddSurfaceCmd.h */, + 01815DF61FE7D53700C35E93 /* BaseCmd.h */, + 01815DF71FE7D53700C35E93 /* ClearSurfacesCmd.cpp */, + 01815DF81FE7D53700C35E93 /* ClearSurfacesCmd.h */, + 01815DF91FE7D53700C35E93 /* CmdManager.cpp */, + 01815DFA1FE7D53700C35E93 /* CmdManager.h */, + 01815DFB1FE7D53700C35E93 /* DeselectSurfaceCmd.cpp */, + 01815DFC1FE7D53700C35E93 /* DeselectSurfaceCmd.h */, + 01815DFD1FE7D53700C35E93 /* DeselectTexCoordCmd.cpp */, + 01815DFE1FE7D53700C35E93 /* DeselectTexCoordCmd.h */, + 01815DFF1FE7D53700C35E93 /* DuplicateSurfaceCmd.cpp */, + 01815E001FE7D53700C35E93 /* DuplicateSurfaceCmd.h */, + 01815E011FE7D53700C35E93 /* MvAllTexCoordsCmd.cpp */, + 01815E021FE7D53700C35E93 /* MvAllTexCoordsCmd.h */, + 01815E031FE7D53700C35E93 /* MvLayerDnCmd.cpp */, + 01815E041FE7D53700C35E93 /* MvLayerDnCmd.h */, + 01815E051FE7D53700C35E93 /* MvLayerUpCmd.cpp */, + 01815E061FE7D53700C35E93 /* MvLayerUpCmd.h */, + 01815E071FE7D53700C35E93 /* MvSelectionCmd.cpp */, + 01815E081FE7D53700C35E93 /* MvSelectionCmd.h */, + 01815E091FE7D53700C35E93 /* MvSurfaceVertCmd.cpp */, + 01815E0A1FE7D53700C35E93 /* MvSurfaceVertCmd.h */, + 01815E0B1FE7D53700C35E93 /* MvTexCoordCmd.cpp */, + 01815E0C1FE7D53700C35E93 /* MvTexCoordCmd.h */, + 01815E0D1FE7D53700C35E93 /* RmGridColCmd.cpp */, + 01815E0E1FE7D53700C35E93 /* RmGridColCmd.h */, + 01815E0F1FE7D53700C35E93 /* RmGridRowCmd.cpp */, + 01815E101FE7D53700C35E93 /* RmGridRowCmd.h */, + 01815E111FE7D53700C35E93 /* RmSurfaceCmd.cpp */, + 01815E121FE7D53700C35E93 /* RmSurfaceCmd.h */, + 01815E131FE7D53700C35E93 /* SaveTexCoordPosCmd.cpp */, + 01815E141FE7D53700C35E93 /* SaveTexCoordPosCmd.h */, + 01815E151FE7D53700C35E93 /* ScaleSurfaceFromToCmd.cpp */, + 01815E161FE7D53700C35E93 /* ScaleSurfaceFromToCmd.h */, + 01815E171FE7D53700C35E93 /* SelNextSurfaceCmd.cpp */, + 01815E181FE7D53700C35E93 /* SelNextSurfaceCmd.h */, + 01815E191FE7D53700C35E93 /* SelNextTexCoordCmd.cpp */, + 01815E1A1FE7D53700C35E93 /* SelNextTexCoordCmd.h */, + 01815E1B1FE7D53700C35E93 /* SelNextVertexCmd.cpp */, + 01815E1C1FE7D53700C35E93 /* SelNextVertexCmd.h */, + 01815E1D1FE7D53700C35E93 /* SelPrevSurfaceCmd.cpp */, + 01815E1E1FE7D53700C35E93 /* SelPrevSurfaceCmd.h */, + 01815E1F1FE7D53700C35E93 /* SelPrevTexCoordCmd.cpp */, + 01815E201FE7D53700C35E93 /* SelPrevTexCoordCmd.h */, + 01815E211FE7D53700C35E93 /* SelPrevVertexCmd.cpp */, + 01815E221FE7D53700C35E93 /* SelPrevVertexCmd.h */, + 01815E231FE7D53700C35E93 /* SelSurfaceCmd.cpp */, + 01815E241FE7D53700C35E93 /* SelSurfaceCmd.h */, + 01815E251FE7D53700C35E93 /* SelTexCoordCmd.cpp */, + 01815E261FE7D53700C35E93 /* SelTexCoordCmd.h */, + 01815E271FE7D53700C35E93 /* SelVertexCmd.cpp */, + 01815E281FE7D53700C35E93 /* SelVertexCmd.h */, + 01815E291FE7D53700C35E93 /* SetApplicationModeCmd.cpp */, + 01815E2A1FE7D53700C35E93 /* SetApplicationModeCmd.h */, + 01815E2B1FE7D53700C35E93 /* SetNextSourceCmd.cpp */, + 01815E2C1FE7D53700C35E93 /* SetNextSourceCmd.h */, + 01815E2D1FE7D53700C35E93 /* SetPresetCmd.cpp */, + 01815E2E1FE7D53700C35E93 /* SetPresetCmd.h */, + 01815E2F1FE7D53700C35E93 /* SetSourceCmd.cpp */, + 01815E301FE7D53700C35E93 /* SetSourceCmd.h */, + 01815E311FE7D53700C35E93 /* SetTexMapDrawModeCmd.cpp */, + 01815E321FE7D53700C35E93 /* SetTexMapDrawModeCmd.h */, + 01815E331FE7D53700C35E93 /* StartDragSurfaceCmd.cpp */, + 01815E341FE7D53700C35E93 /* StartDragSurfaceCmd.h */, + 01815E351FE7D53700C35E93 /* ToggleAnimatedSourceCmd.cpp */, + 01815E361FE7D53700C35E93 /* ToggleAnimatedSourceCmd.h */, + 01815E371FE7D53700C35E93 /* TogglePerspectiveCmd.cpp */, + 01815E381FE7D53700C35E93 /* TogglePerspectiveCmd.h */, + 01815E391FE7D53700C35E93 /* TranslateCanvasCmd.cpp */, + 01815E3A1FE7D53700C35E93 /* TranslateCanvasCmd.h */, + ); + path = Commands; + sourceTree = ""; + }; + 01815E3B1FE7D53700C35E93 /* Gui */ = { + isa = PBXGroup; + children = ( + 01815E3C1FE7D53700C35E93 /* Gui.cpp */, + 01815E3D1FE7D53700C35E93 /* Gui.h */, + 01815E3E1FE7D53700C35E93 /* Widgets */, ); path = Gui; sourceTree = ""; }; - 0115A6331DBF93BA00C51732 /* Widgets */ = { + 01815E3E1FE7D53700C35E93 /* Widgets */ = { isa = PBXGroup; children = ( - 0115A6341DBF93BA00C51732 /* GuiBaseWidget.h */, - 0115A6351DBF93BA00C51732 /* LayerPanelWidget.cpp */, - 0115A6361DBF93BA00C51732 /* LayerPanelWidget.h */, - 0115A6371DBF93BA00C51732 /* ProjectionEditorWidget.cpp */, - 0115A6381DBF93BA00C51732 /* ProjectionEditorWidget.h */, - 0115A6391DBF93BA00C51732 /* ScaleWidget.cpp */, - 0115A63A1DBF93BA00C51732 /* ScaleWidget.h */, - 0115A63B1DBF93BA00C51732 /* SourcesEditorWidget.cpp */, - 0115A63C1DBF93BA00C51732 /* SourcesEditorWidget.h */, - 0115A63D1DBF93BA00C51732 /* SurfaceHighlightWidget.cpp */, - 0115A63E1DBF93BA00C51732 /* SurfaceHighlightWidget.h */, - 0115A6411DBF93BA00C51732 /* TextureEditorWidget.cpp */, - 0115A6421DBF93BA00C51732 /* TextureEditorWidget.h */, - 0115A6431DBF93BA00C51732 /* TextureHighlightWidget.cpp */, - 0115A6441DBF93BA00C51732 /* TextureHighlightWidget.h */, + 01815E3F1FE7D53700C35E93 /* GuiBaseWidget.h */, + 01815E401FE7D53700C35E93 /* LayerPanelWidget.cpp */, + 01815E411FE7D53700C35E93 /* LayerPanelWidget.h */, + 01815E421FE7D53700C35E93 /* ProjectionEditorWidget.cpp */, + 01815E431FE7D53700C35E93 /* ProjectionEditorWidget.h */, + 01815E441FE7D53700C35E93 /* ScaleWidget.cpp */, + 01815E451FE7D53700C35E93 /* ScaleWidget.h */, + 01815E461FE7D53700C35E93 /* SourcesEditorWidget.cpp */, + 01815E471FE7D53700C35E93 /* SourcesEditorWidget.h */, + 01815E481FE7D53700C35E93 /* SurfaceHighlightWidget.cpp */, + 01815E491FE7D53700C35E93 /* SurfaceHighlightWidget.h */, + 01815E4A1FE7D53700C35E93 /* TextureEditorWidget.cpp */, + 01815E4B1FE7D53700C35E93 /* TextureEditorWidget.h */, + 01815E4C1FE7D53700C35E93 /* TextureHighlightWidget.cpp */, + 01815E4D1FE7D53700C35E93 /* TextureHighlightWidget.h */, ); path = Widgets; sourceTree = ""; }; - 0115A6451DBF93BA00C51732 /* Info */ = { + 01815E4E1FE7D53700C35E93 /* Info */ = { isa = PBXGroup; children = ( - 0115A6461DBF93BA00C51732 /* Info.cpp */, - 0115A6471DBF93BA00C51732 /* Info.h */, + 01815E4F1FE7D53700C35E93 /* Info.cpp */, + 01815E501FE7D53700C35E93 /* Info.h */, ); path = Info; sourceTree = ""; }; - 0115A6481DBF93BA00C51732 /* MediaServer */ = { + 01815E511FE7D53700C35E93 /* MediaServer */ = { isa = PBXGroup; children = ( - 0115A6491DBF93BA00C51732 /* DirectoryWatcher.cpp */, - 0115A64A1DBF93BA00C51732 /* DirectoryWatcher.h */, - 0115A64B1DBF93BA00C51732 /* MediaServer.cpp */, - 0115A64C1DBF93BA00C51732 /* MediaServer.h */, + 01815E521FE7D53700C35E93 /* DirectoryWatcher.cpp */, + 01815E531FE7D53700C35E93 /* DirectoryWatcher.h */, + 01815E541FE7D53700C35E93 /* MediaServer.cpp */, + 01815E551FE7D53700C35E93 /* MediaServer.h */, ); path = MediaServer; sourceTree = ""; }; - 0115A64F1DBF93BA00C51732 /* Sources */ = { + 01815E591FE7D53700C35E93 /* Sources */ = { isa = PBXGroup; children = ( - 0115A6501DBF93BA00C51732 /* BaseSource.cpp */, - 0115A6511DBF93BA00C51732 /* BaseSource.h */, - 0115A6521DBF93BA00C51732 /* FboSource.cpp */, - 0115A6531DBF93BA00C51732 /* FboSource.h */, - 0115A6541DBF93BA00C51732 /* ImageSource.cpp */, - 0115A6551DBF93BA00C51732 /* ImageSource.h */, - 0115A6561DBF93BA00C51732 /* OMXPlayerCache.cpp */, - 0115A6571DBF93BA00C51732 /* OMXPlayerCache.h */, - 0115A6581DBF93BA00C51732 /* SourceType.h */, - 0115A6591DBF93BA00C51732 /* VideoSource.cpp */, - 0115A65A1DBF93BA00C51732 /* VideoSource.h */, + 01815E5A1FE7D53700C35E93 /* BaseSource.cpp */, + 01815E5B1FE7D53700C35E93 /* BaseSource.h */, + 01815E5C1FE7D53700C35E93 /* FboSource.cpp */, + 01815E5D1FE7D53700C35E93 /* FboSource.h */, + 01815E5E1FE7D53700C35E93 /* ImageSource.cpp */, + 01815E5F1FE7D53700C35E93 /* ImageSource.h */, + 01815E601FE7D53700C35E93 /* magSlide.cpp */, + 01815E611FE7D53700C35E93 /* magSlide.h */, + 01815E621FE7D53700C35E93 /* magSlideShowSource.cpp */, + 01815E631FE7D53700C35E93 /* magSlideShowSource.h */, + 01815E641FE7D53700C35E93 /* magSlideTransition.cpp */, + 01815E651FE7D53700C35E93 /* magSlideTransition.h */, + 01815E661FE7D53700C35E93 /* magSlideTransitionFactory.cpp */, + 01815E671FE7D53700C35E93 /* magSlideTransitionFactory.h */, + 01815E681FE7D53700C35E93 /* OMXPlayerCache.cpp */, + 01815E691FE7D53700C35E93 /* OMXPlayerCache.h */, + 01815E6A1FE7D53700C35E93 /* SourceType.h */, + 01815E6B1FE7D53700C35E93 /* SourceTypeHelper.h */, + 01815E6C1FE7D53700C35E93 /* VideoSource.cpp */, + 01815E6D1FE7D53700C35E93 /* VideoSource.h */, ); path = Sources; sourceTree = ""; }; - 0115A65B1DBF93BA00C51732 /* Surfaces */ = { + 01815E6E1FE7D53700C35E93 /* Surfaces */ = { isa = PBXGroup; children = ( - 0115A65C1DBF93BA00C51732 /* BaseSurface.cpp */, - 0115A65D1DBF93BA00C51732 /* BaseSurface.h */, - 0115A65E1DBF93BA00C51732 /* GridWarpSurface.cpp */, - 0115A65F1DBF93BA00C51732 /* GridWarpSurface.h */, - 0115A6601DBF93BA00C51732 /* HexagonSurface.cpp */, - 0115A6611DBF93BA00C51732 /* HexagonSurface.h */, - 0115A6621DBF93BA00C51732 /* QuadSurface.cpp */, - 0115A6631DBF93BA00C51732 /* QuadSurface.h */, - 0115A6641DBF93BA00C51732 /* SurfaceFactory.cpp */, - 0115A6651DBF93BA00C51732 /* SurfaceFactory.h */, - 0115A6661DBF93BA00C51732 /* SurfaceManager.cpp */, - 0115A6671DBF93BA00C51732 /* SurfaceManager.h */, - 0115A6681DBF93BA00C51732 /* SurfaceStack.cpp */, - 0115A6691DBF93BA00C51732 /* SurfaceStack.h */, - 0115A66A1DBF93BA00C51732 /* SurfaceType.h */, - 0115A66B1DBF93BA00C51732 /* TriangleSurface.cpp */, - 0115A66C1DBF93BA00C51732 /* TriangleSurface.h */, + 01815E6F1FE7D53700C35E93 /* BaseSurface.cpp */, + 01815E701FE7D53700C35E93 /* BaseSurface.h */, + 01815E711FE7D53700C35E93 /* GridWarpSurface.cpp */, + 01815E721FE7D53700C35E93 /* GridWarpSurface.h */, + 01815E731FE7D53700C35E93 /* HexagonSurface.cpp */, + 01815E741FE7D53700C35E93 /* HexagonSurface.h */, + 01815E751FE7D53700C35E93 /* QuadSurface.cpp */, + 01815E761FE7D53700C35E93 /* QuadSurface.h */, + 01815E771FE7D53700C35E93 /* SurfaceFactory.cpp */, + 01815E781FE7D53700C35E93 /* SurfaceFactory.h */, + 01815E791FE7D53700C35E93 /* SurfaceManager.cpp */, + 01815E7A1FE7D53700C35E93 /* SurfaceManager.h */, + 01815E7B1FE7D53700C35E93 /* SurfaceStack.cpp */, + 01815E7C1FE7D53700C35E93 /* SurfaceStack.h */, + 01815E7D1FE7D53700C35E93 /* SurfaceType.h */, + 01815E7E1FE7D53700C35E93 /* TriangleSurface.cpp */, + 01815E7F1FE7D53700C35E93 /* TriangleSurface.h */, ); path = Surfaces; sourceTree = ""; }; - 0115A66D1DBF93BA00C51732 /* UserInterface */ = { + 01815E801FE7D53700C35E93 /* UserInterface */ = { isa = PBXGroup; children = ( - 0115A66E1DBF93BA00C51732 /* BaseJoint.cpp */, - 0115A66F1DBF93BA00C51732 /* BaseJoint.h */, - 0115A6701DBF93BA00C51732 /* CircleJoint.cpp */, - 0115A6711DBF93BA00C51732 /* CircleJoint.h */, - 0115A6721DBF93BA00C51732 /* EditorType.h */, - 0115A6731DBF93BA00C51732 /* GuiMode.h */, - 0115A6741DBF93BA00C51732 /* RadioList.cpp */, - 0115A6751DBF93BA00C51732 /* RadioList.h */, + 01815E811FE7D53700C35E93 /* BaseJoint.cpp */, + 01815E821FE7D53700C35E93 /* BaseJoint.h */, + 01815E831FE7D53700C35E93 /* CircleJoint.cpp */, + 01815E841FE7D53700C35E93 /* CircleJoint.h */, + 01815E851FE7D53700C35E93 /* EditorType.h */, + 01815E861FE7D53700C35E93 /* GuiMode.h */, + 01815E871FE7D53700C35E93 /* RadioList.cpp */, + 01815E881FE7D53700C35E93 /* RadioList.h */, ); path = UserInterface; sourceTree = ""; }; - 0115A6761DBF93BA00C51732 /* Utils */ = { + 01815E891FE7D53700C35E93 /* Utils */ = { isa = PBXGroup; children = ( - 0115A6771DBF93BA00C51732 /* HomographyHelper.cpp */, - 0115A6781DBF93BA00C51732 /* HomographyHelper.h */, + 01815E8A1FE7D53700C35E93 /* HomographyHelper.cpp */, + 01815E8B1FE7D53700C35E93 /* HomographyHelper.h */, ); path = Utils; sourceTree = ""; }; - 0166303C1DC66DAB0081F28F /* Commands */ = { - isa = PBXGroup; - children = ( - 0166303D1DC66DAB0081F28F /* AddGridColCmd.cpp */, - 0166303E1DC66DAB0081F28F /* AddGridColCmd.h */, - 0166303F1DC66DAB0081F28F /* AddGridRowCmd.cpp */, - 016630401DC66DAB0081F28F /* AddGridRowCmd.h */, - 016630411DC66DAB0081F28F /* AddSurfaceCmd.cpp */, - 016630421DC66DAB0081F28F /* AddSurfaceCmd.h */, - 016630431DC66DAB0081F28F /* BaseCmd.h */, - 016630441DC66DAB0081F28F /* ClearSurfacesCmd.cpp */, - 016630451DC66DAB0081F28F /* ClearSurfacesCmd.h */, - 016630461DC66DAB0081F28F /* CmdManager.cpp */, - 016630471DC66DAB0081F28F /* CmdManager.h */, - 016630481DC66DAB0081F28F /* DeselectSurfaceCmd.cpp */, - 016630491DC66DAB0081F28F /* DeselectSurfaceCmd.h */, - 0166304A1DC66DAB0081F28F /* DeselectTexCoordCmd.cpp */, - 0166304B1DC66DAB0081F28F /* DeselectTexCoordCmd.h */, - 0166304C1DC66DAB0081F28F /* DuplicateSurfaceCmd.cpp */, - 0166304D1DC66DAB0081F28F /* DuplicateSurfaceCmd.h */, - 0166304E1DC66DAB0081F28F /* MvAllTexCoordsCmd.cpp */, - 0166304F1DC66DAB0081F28F /* MvAllTexCoordsCmd.h */, - 016630501DC66DAB0081F28F /* MvLayerDnCmd.cpp */, - 016630511DC66DAB0081F28F /* MvLayerDnCmd.h */, - 016630521DC66DAB0081F28F /* MvLayerUpCmd.cpp */, - 016630531DC66DAB0081F28F /* MvLayerUpCmd.h */, - 016630541DC66DAB0081F28F /* MvSelectionCmd.cpp */, - 016630551DC66DAB0081F28F /* MvSelectionCmd.h */, - 016630561DC66DAB0081F28F /* MvSurfaceVertCmd.cpp */, - 016630571DC66DAB0081F28F /* MvSurfaceVertCmd.h */, - 016630581DC66DAB0081F28F /* MvTexCoordCmd.cpp */, - 016630591DC66DAB0081F28F /* MvTexCoordCmd.h */, - 0166305A1DC66DAB0081F28F /* RmGridColCmd.cpp */, - 0166305B1DC66DAB0081F28F /* RmGridColCmd.h */, - 0166305C1DC66DAB0081F28F /* RmGridRowCmd.cpp */, - 0166305D1DC66DAB0081F28F /* RmGridRowCmd.h */, - 0166305E1DC66DAB0081F28F /* RmSurfaceCmd.cpp */, - 0166305F1DC66DAB0081F28F /* RmSurfaceCmd.h */, - 016630601DC66DAB0081F28F /* SaveTexCoordPosCmd.cpp */, - 016630611DC66DAB0081F28F /* SaveTexCoordPosCmd.h */, - 016630621DC66DAB0081F28F /* ScaleSurfaceFromToCmd.cpp */, - 016630631DC66DAB0081F28F /* ScaleSurfaceFromToCmd.h */, - 016630641DC66DAB0081F28F /* SelNextSurfaceCmd.cpp */, - 016630651DC66DAB0081F28F /* SelNextSurfaceCmd.h */, - 016630661DC66DAB0081F28F /* SelNextTexCoordCmd.cpp */, - 016630671DC66DAB0081F28F /* SelNextTexCoordCmd.h */, - 016630681DC66DAB0081F28F /* SelNextVertexCmd.cpp */, - 016630691DC66DAB0081F28F /* SelNextVertexCmd.h */, - 0166306A1DC66DAB0081F28F /* SelPrevSurfaceCmd.cpp */, - 0166306B1DC66DAB0081F28F /* SelPrevSurfaceCmd.h */, - 0166306C1DC66DAB0081F28F /* SelPrevTexCoordCmd.cpp */, - 0166306D1DC66DAB0081F28F /* SelPrevTexCoordCmd.h */, - 0166306E1DC66DAB0081F28F /* SelPrevVertexCmd.cpp */, - 0166306F1DC66DAB0081F28F /* SelPrevVertexCmd.h */, - 016630701DC66DAB0081F28F /* SelSurfaceCmd.cpp */, - 016630711DC66DAB0081F28F /* SelSurfaceCmd.h */, - 016630721DC66DAB0081F28F /* SelTexCoordCmd.cpp */, - 016630731DC66DAB0081F28F /* SelTexCoordCmd.h */, - 016630741DC66DAB0081F28F /* SelVertexCmd.cpp */, - 016630751DC66DAB0081F28F /* SelVertexCmd.h */, - 016630761DC66DAB0081F28F /* SetApplicationModeCmd.cpp */, - 016630771DC66DAB0081F28F /* SetApplicationModeCmd.h */, - 016630781DC66DAB0081F28F /* SetNextSourceCmd.cpp */, - 016630791DC66DAB0081F28F /* SetNextSourceCmd.h */, - 0166307A1DC66DAB0081F28F /* SetPresetCmd.cpp */, - 0166307B1DC66DAB0081F28F /* SetPresetCmd.h */, - 0166307C1DC66DAB0081F28F /* SetSourceCmd.cpp */, - 0166307D1DC66DAB0081F28F /* SetSourceCmd.h */, - 0166307E1DC66DAB0081F28F /* SetTexMapDrawModeCmd.cpp */, - 0166307F1DC66DAB0081F28F /* SetTexMapDrawModeCmd.h */, - 016630801DC66DAB0081F28F /* StartDragSurfaceCmd.cpp */, - 016630811DC66DAB0081F28F /* StartDragSurfaceCmd.h */, - 016630821DC66DAB0081F28F /* ToggleAnimatedSourceCmd.cpp */, - 016630831DC66DAB0081F28F /* ToggleAnimatedSourceCmd.h */, - 016630841DC66DAB0081F28F /* TogglePerspectiveCmd.cpp */, - 016630851DC66DAB0081F28F /* TogglePerspectiveCmd.h */, - 016630861DC66DAB0081F28F /* TranslateCanvasCmd.cpp */, - 016630871DC66DAB0081F28F /* TranslateCanvasCmd.h */, - ); - path = Commands; - sourceTree = ""; - }; 39264837192224C20008A7F5 /* ofxXmlSettings */ = { isa = PBXGroup; children = ( @@ -694,7 +716,7 @@ 396E8A34190FEDE500705899 /* ofxPiMapper */ = { isa = PBXGroup; children = ( - 0115A5D71DBF93BA00C51732 /* src */, + 01815DDE1FE7D53700C35E93 /* src */, ); name = ofxPiMapper; sourceTree = ""; @@ -880,96 +902,100 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 01815E8C1FE7D59200C35E93 /* Application.cpp in Sources */, + 01815E8D1FE7D59200C35E93 /* ApplicationBaseMode.cpp in Sources */, + 01815E8E1FE7D59200C35E93 /* PresentationMode.cpp in Sources */, + 01815E8F1FE7D59200C35E93 /* ProjectionMappingMode.cpp in Sources */, + 01815E901FE7D59200C35E93 /* SourceSelectionMode.cpp in Sources */, + 01815E911FE7D59200C35E93 /* TextureMappingMode.cpp in Sources */, + 01815E921FE7D59200C35E93 /* SettingsLoader.cpp in Sources */, + 01815E931FE7D59200C35E93 /* AddGridColCmd.cpp in Sources */, + 01815E941FE7D59200C35E93 /* AddGridRowCmd.cpp in Sources */, + 01815E951FE7D59200C35E93 /* AddSurfaceCmd.cpp in Sources */, + 01815E961FE7D59200C35E93 /* ClearSurfacesCmd.cpp in Sources */, + 01815E971FE7D59200C35E93 /* CmdManager.cpp in Sources */, + 01815E981FE7D59200C35E93 /* DeselectSurfaceCmd.cpp in Sources */, + 01815E991FE7D59200C35E93 /* DeselectTexCoordCmd.cpp in Sources */, + 01815E9A1FE7D59200C35E93 /* DuplicateSurfaceCmd.cpp in Sources */, + 01815E9B1FE7D59200C35E93 /* MvAllTexCoordsCmd.cpp in Sources */, + 01815E9C1FE7D59200C35E93 /* MvLayerDnCmd.cpp in Sources */, + 01815E9D1FE7D59200C35E93 /* MvLayerUpCmd.cpp in Sources */, + 01815E9E1FE7D59200C35E93 /* MvSelectionCmd.cpp in Sources */, + 01815E9F1FE7D59200C35E93 /* MvSurfaceVertCmd.cpp in Sources */, + 01815EA01FE7D59200C35E93 /* MvTexCoordCmd.cpp in Sources */, + 01815EA11FE7D59200C35E93 /* RmGridColCmd.cpp in Sources */, + 01815EA21FE7D59200C35E93 /* RmGridRowCmd.cpp in Sources */, + 01815EA31FE7D59200C35E93 /* RmSurfaceCmd.cpp in Sources */, + 01815EA41FE7D59200C35E93 /* SaveTexCoordPosCmd.cpp in Sources */, + 01815EA51FE7D59200C35E93 /* ScaleSurfaceFromToCmd.cpp in Sources */, + 01815EA61FE7D59200C35E93 /* SelNextSurfaceCmd.cpp in Sources */, + 01815EA71FE7D59200C35E93 /* SelNextTexCoordCmd.cpp in Sources */, + 01815EA81FE7D59200C35E93 /* SelNextVertexCmd.cpp in Sources */, + 01815EA91FE7D59200C35E93 /* SelPrevSurfaceCmd.cpp in Sources */, + 01815EAA1FE7D59200C35E93 /* SelPrevTexCoordCmd.cpp in Sources */, + 01815EAB1FE7D59200C35E93 /* SelPrevVertexCmd.cpp in Sources */, + 01815EAC1FE7D59200C35E93 /* SelSurfaceCmd.cpp in Sources */, + 01815EAD1FE7D59200C35E93 /* SelTexCoordCmd.cpp in Sources */, + 01815EAE1FE7D59200C35E93 /* SelVertexCmd.cpp in Sources */, + 01815EAF1FE7D59200C35E93 /* SetApplicationModeCmd.cpp in Sources */, + 01815EB01FE7D59200C35E93 /* SetNextSourceCmd.cpp in Sources */, + 01815EB11FE7D59200C35E93 /* SetPresetCmd.cpp in Sources */, + 01815EB21FE7D59200C35E93 /* SetSourceCmd.cpp in Sources */, + 01815EB31FE7D59200C35E93 /* SetTexMapDrawModeCmd.cpp in Sources */, + 01815EB41FE7D59200C35E93 /* StartDragSurfaceCmd.cpp in Sources */, + 01815EB51FE7D59200C35E93 /* ToggleAnimatedSourceCmd.cpp in Sources */, + 01815EB61FE7D59200C35E93 /* TogglePerspectiveCmd.cpp in Sources */, + 01815EB71FE7D59200C35E93 /* TranslateCanvasCmd.cpp in Sources */, + 01815EB81FE7D59200C35E93 /* Gui.cpp in Sources */, + 01815EB91FE7D59200C35E93 /* LayerPanelWidget.cpp in Sources */, + 01815EBA1FE7D59200C35E93 /* ProjectionEditorWidget.cpp in Sources */, + 01815EBB1FE7D59200C35E93 /* ScaleWidget.cpp in Sources */, + 01815EBC1FE7D59200C35E93 /* SourcesEditorWidget.cpp in Sources */, + 01815EBD1FE7D59200C35E93 /* SurfaceHighlightWidget.cpp in Sources */, + 01815EBE1FE7D59200C35E93 /* TextureEditorWidget.cpp in Sources */, + 01815EBF1FE7D59200C35E93 /* TextureHighlightWidget.cpp in Sources */, + 01815EC01FE7D59200C35E93 /* Info.cpp in Sources */, + 01815EC11FE7D59200C35E93 /* DirectoryWatcher.cpp in Sources */, + 01815EC21FE7D59200C35E93 /* MediaServer.cpp in Sources */, + 01815EC31FE7D59200C35E93 /* ofxPiMapper.cpp in Sources */, + 01815EC41FE7D59200C35E93 /* BaseSource.cpp in Sources */, + 01815EC51FE7D59200C35E93 /* FboSource.cpp in Sources */, + 01815EC61FE7D59200C35E93 /* ImageSource.cpp in Sources */, + 01815EC71FE7D59200C35E93 /* magSlide.cpp in Sources */, + 01815EC81FE7D59200C35E93 /* magSlideShowSource.cpp in Sources */, + 01815EC91FE7D59200C35E93 /* magSlideTransition.cpp in Sources */, + 01815ECA1FE7D59200C35E93 /* magSlideTransitionFactory.cpp in Sources */, + 01815ECB1FE7D59200C35E93 /* OMXPlayerCache.cpp in Sources */, + 01815ECC1FE7D59200C35E93 /* VideoSource.cpp in Sources */, + 01815ECD1FE7D59200C35E93 /* BaseSurface.cpp in Sources */, + 01815ECE1FE7D59200C35E93 /* GridWarpSurface.cpp in Sources */, + 01815ECF1FE7D59200C35E93 /* HexagonSurface.cpp in Sources */, + 01815ED01FE7D59200C35E93 /* QuadSurface.cpp in Sources */, + 01815ED11FE7D59200C35E93 /* SurfaceFactory.cpp in Sources */, + 01815ED21FE7D59200C35E93 /* SurfaceManager.cpp in Sources */, + 01815ED31FE7D59200C35E93 /* SurfaceStack.cpp in Sources */, + 01815ED41FE7D59200C35E93 /* TriangleSurface.cpp in Sources */, + 01815ED51FE7D59200C35E93 /* BaseJoint.cpp in Sources */, + 01815ED61FE7D59200C35E93 /* CircleJoint.cpp in Sources */, + 01815ED71FE7D59200C35E93 /* RadioList.cpp in Sources */, + 01815ED81FE7D59200C35E93 /* HomographyHelper.cpp in Sources */, 3933D5D819BB87BD000ACA55 /* ofxSlider.cpp in Sources */, - 0115A6B71DBF93BA00C51732 /* BaseSurface.cpp in Sources */, - 0115A6A81DBF93BA00C51732 /* ScaleWidget.cpp in Sources */, - 016630A31DC66DAB0081F28F /* SelVertexCmd.cpp in Sources */, - 016630911DC66DAB0081F28F /* MvLayerDnCmd.cpp in Sources */, 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */, - 0166308C1DC66DAB0081F28F /* CmdManager.cpp in Sources */, 3933D5D319BB87BD000ACA55 /* ofxBaseGui.cpp in Sources */, - 0115A6B91DBF93BA00C51732 /* HexagonSurface.cpp in Sources */, 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */, - 0115A6BB1DBF93BA00C51732 /* SurfaceFactory.cpp in Sources */, - 016630921DC66DAB0081F28F /* MvLayerUpCmd.cpp in Sources */, - 0166309C1DC66DAB0081F28F /* SelNextTexCoordCmd.cpp in Sources */, - 0115A6A71DBF93BA00C51732 /* ProjectionEditorWidget.cpp in Sources */, - 0115A67F1DBF93BA00C51732 /* SourceSelectionMode.cpp in Sources */, 3995C20A1C79069B00123352 /* Settings.cpp in Sources */, - 0115A6B61DBF93BA00C51732 /* VideoSource.cpp in Sources */, - 016630891DC66DAB0081F28F /* AddGridRowCmd.cpp in Sources */, - 0115A6AD1DBF93BA00C51732 /* TextureHighlightWidget.cpp in Sources */, - 016630A81DC66DAB0081F28F /* SetTexMapDrawModeCmd.cpp in Sources */, - 0115A6AF1DBF93BA00C51732 /* DirectoryWatcher.cpp in Sources */, - 016630961DC66DAB0081F28F /* RmGridColCmd.cpp in Sources */, - 0115A6AE1DBF93BA00C51732 /* Info.cpp in Sources */, - 0166308F1DC66DAB0081F28F /* DuplicateSurfaceCmd.cpp in Sources */, E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, 39264843192224F90008A7F5 /* tinyxmlparser.cpp in Sources */, - 016630971DC66DAB0081F28F /* RmGridRowCmd.cpp in Sources */, 3933D5D419BB87BD000ACA55 /* ofxButton.cpp in Sources */, - 0115A6B51DBF93BA00C51732 /* OMXPlayerCache.cpp in Sources */, - 0166308E1DC66DAB0081F28F /* DeselectTexCoordCmd.cpp in Sources */, - 0115A67E1DBF93BA00C51732 /* ProjectionMappingMode.cpp in Sources */, - 0115A6B41DBF93BA00C51732 /* ImageSource.cpp in Sources */, - 0166309D1DC66DAB0081F28F /* SelNextVertexCmd.cpp in Sources */, - 016630AC1DC66DAB0081F28F /* TranslateCanvasCmd.cpp in Sources */, - 0166309F1DC66DAB0081F28F /* SelPrevTexCoordCmd.cpp in Sources */, - 016630A21DC66DAB0081F28F /* SelTexCoordCmd.cpp in Sources */, - 0115A6A91DBF93BA00C51732 /* SourcesEditorWidget.cpp in Sources */, - 016630981DC66DAB0081F28F /* RmSurfaceCmd.cpp in Sources */, - 016630A41DC66DAB0081F28F /* SetApplicationModeCmd.cpp in Sources */, - 016630901DC66DAB0081F28F /* MvAllTexCoordsCmd.cpp in Sources */, - 0115A67B1DBF93BA00C51732 /* Application.cpp in Sources */, 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */, - 0115A6B31DBF93BA00C51732 /* FboSource.cpp in Sources */, 3933D5D619BB87BD000ACA55 /* ofxLabel.cpp in Sources */, - 0115A67D1DBF93BA00C51732 /* PresentationMode.cpp in Sources */, - 0166308B1DC66DAB0081F28F /* ClearSurfacesCmd.cpp in Sources */, 399953691BD54FF600D5B1F1 /* CrossSource.cpp in Sources */, - 0115A6AA1DBF93BA00C51732 /* SurfaceHighlightWidget.cpp in Sources */, - 016630A61DC66DAB0081F28F /* SetPresetCmd.cpp in Sources */, - 0115A67C1DBF93BA00C51732 /* ApplicationBaseMode.cpp in Sources */, - 0166309B1DC66DAB0081F28F /* SelNextSurfaceCmd.cpp in Sources */, - 0115A6C01DBF93BA00C51732 /* CircleJoint.cpp in Sources */, - 0166309E1DC66DAB0081F28F /* SelPrevSurfaceCmd.cpp in Sources */, - 0115A6A51DBF93BA00C51732 /* Gui.cpp in Sources */, - 016630A11DC66DAB0081F28F /* SelSurfaceCmd.cpp in Sources */, - 0166308D1DC66DAB0081F28F /* DeselectSurfaceCmd.cpp in Sources */, - 0115A6B01DBF93BA00C51732 /* MediaServer.cpp in Sources */, - 0166308A1DC66DAB0081F28F /* AddSurfaceCmd.cpp in Sources */, - 0115A6AC1DBF93BA00C51732 /* TextureEditorWidget.cpp in Sources */, - 0115A6811DBF93BA00C51732 /* SettingsLoader.cpp in Sources */, - 016630A71DC66DAB0081F28F /* SetSourceCmd.cpp in Sources */, - 0115A6BA1DBF93BA00C51732 /* QuadSurface.cpp in Sources */, E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */, - 016630A01DC66DAB0081F28F /* SelPrevVertexCmd.cpp in Sources */, - 016630A51DC66DAB0081F28F /* SetNextSourceCmd.cpp in Sources */, - 0115A6B21DBF93BA00C51732 /* BaseSource.cpp in Sources */, - 016630941DC66DAB0081F28F /* MvSurfaceVertCmd.cpp in Sources */, 3933D5D719BB87BD000ACA55 /* ofxPanel.cpp in Sources */, - 0115A6BC1DBF93BA00C51732 /* SurfaceManager.cpp in Sources */, - 016630AA1DC66DAB0081F28F /* ToggleAnimatedSourceCmd.cpp in Sources */, - 0166309A1DC66DAB0081F28F /* ScaleSurfaceFromToCmd.cpp in Sources */, - 0115A6801DBF93BA00C51732 /* TextureMappingMode.cpp in Sources */, - 016630931DC66DAB0081F28F /* MvSelectionCmd.cpp in Sources */, - 0115A6B11DBF93BA00C51732 /* ofxPiMapper.cpp in Sources */, - 0115A6BD1DBF93BA00C51732 /* SurfaceStack.cpp in Sources */, - 0115A6A61DBF93BA00C51732 /* LayerPanelWidget.cpp in Sources */, - 016630951DC66DAB0081F28F /* MvTexCoordCmd.cpp in Sources */, - 0115A6BE1DBF93BA00C51732 /* TriangleSurface.cpp in Sources */, - 0115A6C21DBF93BA00C51732 /* HomographyHelper.cpp in Sources */, - 0115A6B81DBF93BA00C51732 /* GridWarpSurface.cpp in Sources */, 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */, 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */, - 016630881DC66DAB0081F28F /* AddGridColCmd.cpp in Sources */, 397EFC821A09047C0009286E /* CustomSource.cpp in Sources */, - 016630AB1DC66DAB0081F28F /* TogglePerspectiveCmd.cpp in Sources */, - 016630991DC66DAB0081F28F /* SaveTexCoordPosCmd.cpp in Sources */, - 016630A91DC66DAB0081F28F /* StartDragSurfaceCmd.cpp in Sources */, 3933D5D519BB87BD000ACA55 /* ofxGuiGroup.cpp in Sources */, - 0115A6C11DBF93BA00C51732 /* RadioList.cpp in Sources */, - 0115A6BF1DBF93BA00C51732 /* BaseJoint.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/example/openFrameworks-Info.plist b/example/openFrameworks-Info.plist index 60abaf8..8d64d2b 100644 --- a/example/openFrameworks-Info.plist +++ b/example/openFrameworks-Info.plist @@ -6,8 +6,6 @@ English CFBundleExecutable ${EXECUTABLE_NAME} - CFBundleIconFile - ${ICON} CFBundleIdentifier cc.openFrameworks.ofapp CFBundleInfoDictionaryVersion @@ -18,5 +16,7 @@ ???? CFBundleVersion 1.0 + CFBundleIconFile + ${ICON} diff --git a/example/src/main.cpp b/example/src/main.cpp index e5733f9..d743ec0 100644 --- a/example/src/main.cpp +++ b/example/src/main.cpp @@ -17,6 +17,6 @@ int main(int argc, char * argv[]){ Settings::instance()->setFullscreen(fullscreen); - ofSetupOpenGL(800, 450, OF_WINDOW); + ofSetupOpenGL(1024, 768, OF_WINDOW); ofRunApp(new ofApp()); } diff --git a/example/src/ofApp.cpp b/example/src/ofApp.cpp index 93a0d08..d4d9395 100644 --- a/example/src/ofApp.cpp +++ b/example/src/ofApp.cpp @@ -14,15 +14,24 @@ void ofApp::setup(){ // a surface in XML settings. crossSource = new CrossSource(); customSource = new CustomSource(); + + // Create the slide show source. + slideShowSource = new magSlideShowSource(); + + // Register our sources: piMapper.registerFboSource(crossSource); piMapper.registerFboSource(customSource); + piMapper.registerFboSource(slideShowSource); piMapper.setup(); // The info layer is hidden by default, press to toggle // piMapper.showInfo(); - + ofSetFullscreen(Settings::instance()->getFullscreen()); ofSetEscapeQuitsApp(false); + ofSetLogLevel(OF_LOG_VERBOSE); + + slideShowSource->play(); } void ofApp::update(){ diff --git a/example/src/ofApp.h b/example/src/ofApp.h index 8ca4b64..5718af7 100644 --- a/example/src/ofApp.h +++ b/example/src/ofApp.h @@ -6,24 +6,28 @@ #include "CustomSource.h" #include "CrossSource.h" #include "VideoSource.h" +#include "magSlideShowSource.h" -class ofApp : public ofBaseApp { - public: - void setup(); - void update(); - void draw(); - - void keyPressed(int key); - void keyReleased(int key); - - void mousePressed(int x, int y, int button); - void mouseReleased(int x, int y, int button); - void mouseDragged(int x, int y, int button); +class ofApp : public ofBaseApp +{ +public: + void setup(); + void update(); + void draw(); - ofxPiMapper piMapper; + void keyPressed(int key); + void keyReleased(int key); + + void mousePressed(int x, int y, int button); + void mouseReleased(int x, int y, int button); + void mouseDragged(int x, int y, int button); + + ofxPiMapper piMapper; + + // By using a custom source that is derived from FboSource + // you will be able to see the source listed in sources editor + CustomSource *customSource; + CrossSource *crossSource; + magSlideShowSource *slideShowSource; - // By using a custom source that is derived from FboSource - // you will be able to see the source listed in sources editor - CustomSource * customSource; - CrossSource * crossSource; }; diff --git a/src/Application/Application.cpp b/src/Application/Application.cpp index 7ecaf44..d77596e 100644 --- a/src/Application/Application.cpp +++ b/src/Application/Application.cpp @@ -121,7 +121,7 @@ void Application::onKeyPressed(ofKeyEventArgs & args){ setSourceMode(); break; - case 'i': + case 'c': toggleInfo(); break; @@ -132,8 +132,8 @@ void Application::onKeyPressed(ofKeyEventArgs & args){ case 'z': undo(); break; - - case 'n': + + case 'f': setNextPreset(); break; diff --git a/src/Application/Modes/ProjectionMappingMode.cpp b/src/Application/Modes/ProjectionMappingMode.cpp index 39d4f5b..9495743 100644 --- a/src/Application/Modes/ProjectionMappingMode.cpp +++ b/src/Application/Modes/ProjectionMappingMode.cpp @@ -64,11 +64,11 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg app->createSurface(SurfaceType::GRID_WARP_SURFACE); break; - case 'h': + case 'x': app->createSurface(SurfaceType::HEXAGON_SURFACE); break; - case OF_KEY_BACKSPACE: + case 'd': app->eraseSurface(app->getSurfaceManager()->getSelectedSurfaceIndex()); break; @@ -76,19 +76,19 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg app->togglePerspective(); break; - case '}': + case 'n': app->addGridRow(); break; - case '{': + case 'm': app->removeGridRow(); break; - case ']': + case 'v': app->addGridColumn(); break; - case '[': + case 'b': app->removeGridColumn(); break; @@ -100,15 +100,15 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg app->selectPrevSurface(); break; - case '>': + case 'k': app->selectNextVertex(); break; - case '<': + case 'l': app->selectPrevVertex(); break; - case OF_KEY_UP: + case '8': if(app->isShiftKeyDown()){ app->moveSelection(ofVec2f(0.0f, -10.0f)); }else{ @@ -116,7 +116,7 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg } break; - case OF_KEY_DOWN: + case '9': if(app->isShiftKeyDown()){ app->moveSelection(ofVec2f(0.0f, 10.0f)); }else{ @@ -124,7 +124,7 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg } break; - case OF_KEY_LEFT: + case '7': if(app->isShiftKeyDown()){ app->moveSelection(ofVec2f(-10.0f, 0.0f)); }else{ @@ -132,7 +132,7 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg } break; - case OF_KEY_RIGHT: + case '0': if(app->isShiftKeyDown()){ app->moveSelection(ofVec2f(10.0f, 0.0f)); }else{ @@ -140,35 +140,35 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg } break; - case ' ': + case 'w': app->togglePause(); break; - case OF_KEY_TAB: + case '5': app->setNextSource(); break; - case 'd': + case 'a': app->duplicateSurface(); break; - case '0': // Move selected surface up the layer stack + case 'h': // Move selected surface up the layer stack app->moveLayerUp(); break; - case '9': // Move selected surface down the layer stack + case 'j': // Move selected surface down the layer stack app->moveLayerDown(); break; - case '+': // Scale surface up + case 'o': // Scale surface up app->scaleUp(); break; - case '-': // Scale surface down + case 'i': // Scale surface down app->scaleDown(); break; - case 'l': + case 'y': _bDrawLayerPanel = !_bDrawLayerPanel; break; @@ -295,4 +295,4 @@ void ProjectionMappingMode::onGuiEvent(Application * app, GuiEvent & e){ } } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/MediaServer/DirectoryWatcher.cpp b/src/MediaServer/DirectoryWatcher.cpp index 3c86543..104abcf 100644 --- a/src/MediaServer/DirectoryWatcher.cpp +++ b/src/MediaServer/DirectoryWatcher.cpp @@ -4,8 +4,9 @@ namespace ofx { namespace piMapper { DirectoryWatcher::DirectoryWatcher(string path, int watcherMediaType){ + directoryPath = path; _mediaType = watcherMediaType; - + if(_mediaType == SourceType::SOURCE_TYPE_VIDEO){ _directory.allowExt("mp4"); _directory.allowExt("h264"); @@ -21,20 +22,27 @@ DirectoryWatcher::DirectoryWatcher(string path, int watcherMediaType){ ofLogFatalError("DirectoryWatcher::DirectoryWatcher", "Unkonwn media type"); exit(EXIT_FAILURE); } - - _directory.listDir(path); + + _directory.listDir(directoryPath); _directory.sort(); - + for(int i = 0; i < _directory.size(); ++i){ - _filePaths.push_back(path + _directory.getName(i)); - - ofFile file(path + _directory.getName(i)); + _filePaths.push_back(directoryPath + _directory.getName(i)); + + ofFile file(directoryPath + _directory.getName(i)); if(_mediaType == SourceType::SOURCE_TYPE_VIDEO){ file.copyTo("sources/videos/" + _directory.getName(i)); }else if(_mediaType == SourceType::SOURCE_TYPE_IMAGE){ file.copyTo("sources/images/" + _directory.getName(i)); } } + + dirSize = _directory.size(); +} + +DirectoryWatcher::~DirectoryWatcher() { + endWatch(); +// waitForThread(false); } vector & DirectoryWatcher::getFilePaths(){ @@ -45,5 +53,34 @@ int DirectoryWatcher::getMediaType(){ return _mediaType; } +void DirectoryWatcher::beginWatch(int intervalInMillis) { + watchInterval = intervalInMillis; + startThread(); +} + +void DirectoryWatcher::endWatch() { + stopThread(); +} + +void DirectoryWatcher::threadedFunction() { + + while (isThreadRunning()) { + + int newSize = _directory.listDir(); + if (newSize > dirSize) { + ofLogVerbose("DirectoryWatcher") << "Directory changed"; + dirSize = newSize; + ofNotifyEvent(directoryFileAddedEvent, this); + } else if (newSize < dirSize) { + dirSize = newSize; + ofNotifyEvent(directoryFileRemovedEvent, this); + } + + + + sleep(watchInterval); + } +} + } // namespace piMapper } // namespace ofx diff --git a/src/MediaServer/DirectoryWatcher.h b/src/MediaServer/DirectoryWatcher.h index 717bbde..8ef7ede 100644 --- a/src/MediaServer/DirectoryWatcher.h +++ b/src/MediaServer/DirectoryWatcher.h @@ -6,16 +6,36 @@ namespace ofx { namespace piMapper { -class DirectoryWatcher { +class DirectoryWatcher : public ofThread { public: DirectoryWatcher(string path, int watcherMediaType); - vector & getFilePaths(); + virtual ~DirectoryWatcher(); + vector &getFilePaths(); int getMediaType(); + void beginWatch(int intervalInMillis = 5000); + void endWatch(); + void threadedFunction(); + + /** + * Notifies when files are added to this directory. + * Sender is a pointer to this DirectoryWatcher + */ + ofEvent directoryFileAddedEvent; + /** + * Notifies when files are removed from this directory. + * Sender is a pointer to this DirectoryWatcher + */ + ofEvent directoryFileRemovedEvent; + private: ofDirectory _directory; vector _filePaths; + std::string directoryPath; int _mediaType; + + int dirSize; + long watchInterval; // in millis. }; } // namespace piMapper diff --git a/src/MediaServer/MediaServer.cpp b/src/MediaServer/MediaServer.cpp index 9ab8ba8..da37819 100644 --- a/src/MediaServer/MediaServer.cpp +++ b/src/MediaServer/MediaServer.cpp @@ -19,14 +19,17 @@ MediaServer::MediaServer(): { // By initialising all above we also copy files from external media // to the ofxPiMapper storage. - - imageWatcher = DirectoryWatcher( - ofToDataPath(DEFAULT_IMAGES_DIR, true), - SourceType::SOURCE_TYPE_IMAGE); - - videoWatcher = DirectoryWatcher( - ofToDataPath(DEFAULT_VIDEOS_DIR, true), - SourceType::SOURCE_TYPE_VIDEO); + imageWatcher.beginWatch(); + + +// imageWatcher = DirectoryWatcher( +// ofToDataPath(DEFAULT_IMAGES_DIR, true), +// SourceType::SOURCE_TYPE_IMAGE); +// imageWatcher.beginWatch(); +// +// videoWatcher = DirectoryWatcher( +// ofToDataPath(DEFAULT_VIDEOS_DIR, true), +// SourceType::SOURCE_TYPE_VIDEO); } void MediaServer::setup(){ diff --git a/src/Sources/magSlide.cpp b/src/Sources/magSlide.cpp new file mode 100644 index 0000000..c334cbe --- /dev/null +++ b/src/Sources/magSlide.cpp @@ -0,0 +1,204 @@ +// +// magSlide.cpp +// Copyright (c) 2017 Cristobal Mendoza +// http://cuppetellimendoza.com +// + +#include "magSlide.h" +#include "magSlideTransition.h" + +#pragma mark magSlide + +int magSlide::idCount = 0; + +magSlide::magSlide(std::string type) +{ + this->type = type; + position = ofPoint(0, 0); + id = magSlide::idCount; + magSlide::idCount++; +} + +void magSlide::update(u_int64_t deltaTime) +{ + transition->update(deltaTime); + runningTime += deltaTime; + + switch (slideState) + { +// case SlideState::BuildIn: +// if (runningTime >= buildInDuration) +// { +// setState(Normal); +// activeTransition = nullptr; +// } +// break; + + case SlideState::Normal: + if (runningTime >= buildOutStartTime) + { + setState(BuildOut); + } + break; + + case SlideState::BuildOut: + if (runningTime >= endTime) + { + setState(Complete); + } + break; + } + +} + +void magSlide::setSize(float w, float h) +{ + width = w; + height = h; +} + +void magSlide::setResizeOption(magSlide::ResizeOptions resizeOption) +{ + this->resizeOption = resizeOption; +} + +magSlide::ResizeOptions magSlide::getResizeOption() const +{ + return resizeOption; +} + +void magSlide::setDuration(u_int64_t duration) +{ + this->duration = duration; +} + +void magSlide::setState(SlideState state) +{ + // Don't do anything if the new state is the same + // as the current one: + if (slideState == state) return; + + slideState = state; + ofEventArgs args; + ofNotifyEvent(slideStateChangedEvent, args, this); + + if (slideState == Complete) + { + ofNotifyEvent(slideCompleteEvent, args, this); + } +} + +void magSlide::setTransitionDuration(u_int64_t tDuration) +{ + buildOutDuration = tDuration; +} + +const std::string magSlide::getSlideStateName() +{ + switch (slideState) + { +// case SlideState::BuildIn: +// return "BuildIn"; + case SlideState::BuildOut: + return "BuildOut"; + case Normal: + return "Normal"; + case SlideState::Complete: + return "Complete"; + case SlideState::Off: + return "Off"; + } + + return "unknown"; +} + +void magSlide::start(u_int64_t startTime) +{ + this->startTime = startTime; + runningTime = 0; + endTime = duration + (buildOutDuration*2); // *2 because we take into account transition in and out + buildOutStartTime = duration + buildOutDuration; + slideState = magSlide::SlideState::Normal; + position.set(0, 0); + opacity = 255; + isComplete = false; +} + +void magSlide::draw() +{ + ofSetColor(255, opacity); + if(transition->isActive()) + { + transition->draw(); + } +} + + +//////////////////////////////////////////////////////// +#pragma mark MAG_IMAGE_SLIDE +//////////////////////////////////////////////////////// + +magImageSlide::magImageSlide() : magSlide("magImageSlide") {} + +magImageSlide::~magImageSlide() {} + +void magImageSlide::setup(ofImage &image) +{ + // Make a copy of the image: + this->image = ofImage(image); + image.setAnchorPercent(0.5, 0.5); + width = image.getWidth(); + height = image.getHeight(); +} + +void magImageSlide::draw() +{ + magSlide::draw(); + image.draw(position, width, height); +} + +//////////////////////////////////////////////////////// +#pragma mark MAG_VIDEO_SLIDE +//////////////////////////////////////////////////////// + +magVideoSlide::magVideoSlide() : magSlide("magVideoSlide") +{} + +magVideoSlide::~magVideoSlide() +{ + videoPlayer.stop(); +} + +bool magVideoSlide::setup(ofFile &file, bool useVideoDuration) +{ + + bool success = videoPlayer.load(file.getAbsolutePath()); + + if (success) + { + videoPlayer.setAnchorPercent(0.5, 0.5); + if (useVideoDuration) + { + useVideoForDuration(); + } + } + + return success; +} + +void magVideoSlide::update() +{ + videoPlayer.update(); +} + +void magVideoSlide::draw() +{ + magSlide::draw(); + videoPlayer.draw(position.x, position.y, width, height); +} + +void magVideoSlide::useVideoForDuration() +{ + duration = u_int64_t((videoPlayer.getDuration()*1000)) - buildOutDuration; +} + diff --git a/src/Sources/magSlide.h b/src/Sources/magSlide.h new file mode 100644 index 0000000..74e1b2c --- /dev/null +++ b/src/Sources/magSlide.h @@ -0,0 +1,263 @@ +// +// Created by Cristobal Mendoza on 11/9/17. +// + +#ifndef MAGSLIDE_H +#define MAGSLIDE_H + +#include "ofMain.h" + +class magSlideTransition; + +class magSlide +{ +public: + magSlide(std::string type); +// ~magSlide(); + virtual void update(u_int64_t deltaTime); + virtual void draw(); + + /** + * Sets the slide up for playback. This method must be + * called before displaying the slide. + * @param startTime + */ + void start(u_int64_t startTime); + + enum ResizeOptions : short + { + /** + * No resizing applied, displays the slide in its native pixel dimensions. + * This is the default behavior. + */ + NoResize = 0, + /** + * Explicitly set a slide to display in its native dimension. + * None and NoResize result in the same output, but if you specify + * a default resizing option in your slideshow and you want a particular + * slide not to resize, you must specify this option. Otherwise the + * slide show option will apply. + */ + Native, + + /** + * Sets width and height to match the source's. + * This will distort the slide if the aspect ratios + * don't match. + */ + Fit, + + /** + * Resizes the largest dimension to the source's max, + * the other dimension is resized proportionally. + */ + FitProportionally, + + /** + * Resizes the shortest dimensions to the source's max, + */ + FillProportionally, + }; + + enum SlideState : short + { + Off = 0, +// BuildIn, + Normal, + BuildOut, + Complete + }; + + const std::string &getType() + { return type; } + + float getWidth() + { return width; } + + float getHeight() + { return height; } + + float getOpacity() const + { + return opacity; + } + + void setOpacity(float opacity) + { + magSlide::opacity = opacity; + } + + /** + * Change the display size of a slide. This will implicitly + * set resizeOptions to ResizeOption.NoResize. + * This method does not resize the pixel source of the slide. + * @param w The new width + * @param h The new height + */ + virtual void setSize(float w, float h); + + u_int64_t getDuration() + { + return duration; + } + + /** + * Sets the display time of the slide, excluding + * builds (in or out) + * @param duration in milliseconds. + */ + void setDuration(u_int64_t duration); + + /** + * Sets the duration of the buildIn and buildOut + * transitions. Transition times are added to the + * duration of the slide. + * @param tDuration in milliseconds. + */ + void setTransitionDuration(u_int64_t tDuration); + + ResizeOptions getResizeOption() const; + void setResizeOption(ResizeOptions resizeOption); + + SlideState getSlideState() const + { + return slideState; + } + + bool isSlideComplete() + { return isComplete; } + + int getId() + { return id; } + + const std::string getSlideStateName(); + + ////////////////////////////// + /// Events + ////////////////////////////// + ofEvent slideCompleteEvent; + ofEvent slideStateChangedEvent; + + friend class magSlideShowSource; + +protected: + int id; + std::string type; + float width; + float height; + ofPoint position; +public: + const ofPoint &getPosition() const + { + return position; + } + + void setPosition(const ofPoint &position) + { + magSlide::position = position; + } + + void setPosition(float x, float y) + { + position.set(x, y); + } + + +protected: + float opacity = 255; + ResizeOptions resizeOption = NoResize; + SlideState slideState = Off; + bool isComplete = false; + +// std::shared_ptr buildIn = nullptr; +// std::shared_ptr buildOut = nullptr; + std::shared_ptr transition = nullptr; +public: + const shared_ptr &getTransition() const + { + return transition; + } + +protected: + /** + * The duration of the slide in millis, not counting builds + */ + u_int64_t duration; + + /** + * The start time of the slide in milliseconds, in "local time". + * In practice, this means that the start time is always 0. + */ + u_int64_t startTime; + + /** + * The end time of the slide in milliseconds, in "local time". + * The endTime is startTime + buildInDuration + duration + buildOutDuration. + */ + u_int64_t endTime; + + /** + * The duration of the build in transition or effect, in milliseconds. + */ +// u_int64_t buildInDuration; + + /** + * The duration of the build out transition or effect, in milliseconds. + */ + u_int64_t buildOutDuration; + + /** + * The "local time" start of the build out transition. This time should also + * signal the enqueuing of the next slide, if applicable. + */ + u_int64_t buildOutStartTime; + + /** + * The amount of time the slide has been displayed, in milliseconds. + * This constitutes the "local time" of the slide. + */ + u_int64_t runningTime; + + void setState(SlideState state); + + static int idCount; +}; + +class magImageSlide : public magSlide +{ +public: + magImageSlide(); + ~ magImageSlide(); + /** + * Sets up an image slide. + * @param image is copied into the member magImageSlide::image and is + * not modified in any way. + */ + void setup(ofImage &image); + + void draw(); + +protected: + ofImage image; +}; + +class magVideoSlide : public magSlide +{ +public: + magVideoSlide(); + ~magVideoSlide(); + bool setup(ofFile &file, bool useVideoDuration = false); + void update(); + void draw(); + + /** + * Sets the slide duration to the duration of the video. + * magSlide::duration will be changed by this call, so if you later + * change your mind you'll have to use magSlide::setDuration. + */ + void useVideoForDuration(); +protected: + ofVideoPlayer videoPlayer; +}; + +#endif diff --git a/src/Sources/magSlideShowSource.cpp b/src/Sources/magSlideShowSource.cpp new file mode 100644 index 0000000..e3d6a74 --- /dev/null +++ b/src/Sources/magSlideShowSource.cpp @@ -0,0 +1,533 @@ +// +// magSlideShowSource.cpp +// Copyright (c) 2017 Cristobal Mendoza +// http://cuppetellimendoza.com +// + + +#include "magSlideShowSource.h" +#include "magSlideTransition.h" +#include "SettingsLoader.h" +#include "magSlideTransitionFactory.h" + +const std::string magSlideShowSource::SettingsFileName = "magslideshow_settings.xml"; + +magSlideShowSource::magSlideShowSource() { + name = "Slide Show Source"; + currentSlideIndex = 0; + isPlaying = false; + directoryWatcher = 0; + doInit = false; + if (!loadFromXml(SettingsFileName)) + { + ofLogError("magSlideShowSource") << "Could not find slide show settings file " << SettingsFileName; + Settings sets; + initialize(sets); + } +} + +magSlideShowSource::~magSlideShowSource() { + directoryWatcher->endWatch(); + delete directoryWatcher; +} + +bool magSlideShowSource::initialize(magSlideShowSource::Settings settings) { + this->settings = settings; + bool success = true; + + if (settings.width <= 0 || settings.height <= 0) + { + ofLogError("magSlideShowSource::initialize") << "Invalid value for width or height. Width and height " + "must be assigned in your Settings struct!"; + return false; + } + + // Allocate the FBO: + allocate(settings.width, settings.height); + + // If there is a path in slidesFolderPath, attempt + // to load the folder and any files in it: + if (!settings.slidesFolderPath.empty()) + { +// ofDirectory dir = ofDirectory(settings.slidesFolderPath); + success = createFromFolderContents(settings.slidesFolderPath); + + if (!success) + { + ofLogError("magSlideShowSource::initialize") << "Failed to create slide show from folder " + << settings.slidesFolderPath; + return success; + } + { + if (directoryWatcher == 0) + { + + using namespace ofx::piMapper; + directoryWatcher = new DirectoryWatcher(settings.slidesFolderPath, + SourceTypeHelper::GetSourceTypeHelperEnum( + SOURCE_TYPE_NAME_IMAGE)); + ofAddListener(directoryWatcher->directoryFileAddedEvent, this, &magSlideShowSource::fileAddedListener); + ofAddListener(directoryWatcher->directoryFileRemovedEvent, this, + &magSlideShowSource::fileRemovedListener); + directoryWatcher->beginWatch(); + } + } + + } + else if (!settings.slideshowFilePath.empty()) + { + success = false; + } + + return success; +} + +void magSlideShowSource::setup() { + ofx::piMapper::FboSource::setup(); +} + +void magSlideShowSource::update() { + + // Perform re-initialization if the DirectoryWatcher + // detects file changes: + if (doInit) + { + initialize(settings); + doInit = false; + } + + if (!isPlaying) return; + + auto nowTime = ofGetElapsedTimeMillis(); + deltaTime = nowTime-lastTime; + runningTime += deltaTime; + lastTime = nowTime; + + for (auto &slide : activeSlides) + { + slide->update(deltaTime); + } + + // Queue the next slide if it is time + if (doPlayNextSlide) + { + playNextSlide(); + if (activeSlides.size() > 1) + { + activeSlides[1]->transition->start(activeSlides[0]); + } + doPlayNextSlide = false; + } + + // Erase any complete slides: + auto iter = activeSlides.begin(); + for (; iter < activeSlides.end(); iter++) + { + if ((*iter)->isSlideComplete()) + { +// ofLogVerbose() << "Removing from active slides id: " << (*iter)->getId(); + activeSlides.erase(iter); + --iter; + } + } + + if (activeSlides.size() == 0 && isPlaying) + { + ofEventArgs args; + isPlaying = false; + ofNotifyEvent(slideshowCompleteEvent, args, this); + } +} + +void magSlideShowSource::draw() { + ofBackground(0, 0); + ofPushMatrix(); + ofPushStyle(); + ofTranslate(getWidth()/2.0f, getHeight()/2.0f); + ofEnableAlphaBlending(); + ofSetRectMode(OF_RECTMODE_CENTER); + ofFill(); + ofSetColor(255, 255); + for (auto &slide : activeSlides) + { + slide->draw(); + } + ofPopStyle(); + ofPopMatrix(); + ofDisableAlphaBlending(); +} + +bool magSlideShowSource::createFromFolderContents(std::string path) { + ofDirectory dir = ofDirectory(path); + slides.clear(); + + if (!dir.isDirectory()) + { + ofLogError("magSlideShowSource::createFromFolderContents") << "Folder path " << dir.getAbsolutePath() + << " is not a directory"; + return false; + } + + auto sortedDir = dir.getSorted(); + auto files = sortedDir.getFiles(); + + if (files.size() < 1) + { + ofLogError("magSlideShowSource::createFromFolderContents") << "Folder " << dir.getAbsolutePath() << " is empty"; + return false; + } + + ofImage tempImage; + for (auto &file : files) + { + if (tempImage.load(file)) + { + // make a new image slide + auto slide = std::make_shared(); + slide->setup(tempImage); + slide->setDuration(static_cast(settings.slideDuration*1000)); + slide->setTransitionDuration(static_cast(settings.transitionDuration*1000)); +// if (settings.transitionName == "") + addSlide(slide); + } + else + { + auto ext = ofToLower(file.getExtension()); + + static std::vector movieExtensions = { + "mov", "qt", // Mac + "mp4", "m4p", "m4v", // MPEG + "mpg", "mp2", "mpeg", "mpe", "mpv", "m2v", // MPEG + "3gp", // Phones + "avi", "wmv", "asf", // Windows + "webm", "mkv", "flv", "vob", // Other containers + "ogv", "ogg", + "drc", "mxf" + }; + + // Check if the extension matches known movie formats: + if (ofContains(movieExtensions, ext)) + { + // Make a new video slide + auto slide = std::make_shared(); + if (slide->setup(file)) + { + slide->setDuration(settings.slideDuration*1000.0); + slide->setTransitionDuration(settings.transitionDuration*1000.0); + addSlide(slide); + } + else + { + ofLogError("magSlideShowSource") << "Failed loading video: " << file.getAbsolutePath(); + } + } + + } + } + + if (slides.size() > 0) + { + return true; + } + else + { + return false; + } +} + +bool magSlideShowSource::loadFromXml(std::string path) { + auto xml = ofxXmlSettings(); + Settings settings; + + if (!xml.load(path)) + { + ofLogError("magSlideShowSource") << "Could not load settings file " << path; + return false; + } + +// xml.pushTag("surfaces"); + if (!xml.pushTag("magSlideShow")) + { + ofLogError("magSlideShowSource") << "Slide show settings not found in " << path; + return false; + } + + settings.width = xml.getValue("Width", settings.width); + settings.height = xml.getValue("Height", settings.height); + + // Default slide duration: + settings.slideDuration = xml.getValue("SlideDuration", settings.slideDuration); + + // Default loop: + if (xml.pushTag("Loop")) + { + auto type = xml.getValue("Type", ""); + if (type == "NONE") + { + settings.loopType = LoopType::NONE; + } + else if (type == "NORMAL") + { + settings.loopType = LoopType::NORMAL; + } + else if (type == "PING-PONG") + { + settings.loopType = LoopType::PING_PONG; + } + + settings.numLoops = xml.getValue("Count", settings.numLoops); + xml.popTag(); + } + + if (xml.pushTag("Transition")) + { + settings.transitionName = xml.getValue("Type", settings.transitionName); + settings.transitionDuration = xml.getValue("Duration", settings.transitionDuration); + xml.popTag(); + } + + // Default resize options: + auto ropts = xml.getValue("ResizeOption", ""); + if (ropts == "NoResize") + { + settings.resizeOption = magSlide::NoResize; + } + else if (ropts == "Native") + { + settings.resizeOption = magSlide::Native; + } + else if (ropts == "Fit") + { + settings.resizeOption = magSlide::Fit; + } + else if (ropts == "FitProportionally") + { + settings.resizeOption = magSlide::FitProportionally; + } + else if (ropts == "FillProportionally") + { + settings.resizeOption = magSlide::FillProportionally; + } + + initialize(settings); + return true; +} + +void magSlideShowSource::addSlide(std::shared_ptr slide) { +// ofLogVerbose("addSlide") << slide->getId(); + slides.insert(slides.begin(), slide); + auto rOption = slide->getResizeOption(); + + // If the slide does not have a resize option assign + // the slide show's option + if (rOption == magSlide::ResizeOptions::NoResize) + { + rOption = settings.resizeOption; + } + + // Resize the slide according to the resize option: + switch (rOption) + { + float sw, sh, ratio; + + case magSlide::ResizeOptions::FitProportionally: + sw = slide->getWidth(); + sh = slide->getHeight(); + + if (sw > sh) + { + ratio = (float) getWidth()/sw; + } + else + { + ratio = (float) getHeight()/sh; + } + + slide->setSize(sw*ratio, sh*ratio); + break; + + case magSlide::ResizeOptions::FillProportionally: + sw = slide->getWidth(); + sh = slide->getHeight(); + + if (sw > sh) + { + ratio = (float) getHeight()/sh; + } + else + { + ratio = (float) getWidth()/sw; + } + + slide->setSize(sw*ratio, sh*ratio); + break; + + case magSlide::Fit: + slide->setSize(getWidth(), getHeight()); + break; + } + + // Add transitions: + + static ofParameterGroup bogusParamGroup; // This is temporary so that things compile + + auto tf = magSlideTransitionFactory::instance(); +// slide->buildIn = tf->createTransition(settings.transitionName, +// slide, +// bogusParamGroup, +// slide->buildInDuration); + slide->transition = tf->createTransition(settings.transitionName, + slide, + bogusParamGroup, + slide->buildOutDuration); + + //// void method(const void * sender, ArgumentsType &args) + ofAddListener(slide->slideStateChangedEvent, this, &magSlideShowSource::slideStateChanged); + ofAddListener(slide->slideCompleteEvent, this, &magSlideShowSource::slideComplete); + +} + +void magSlideShowSource::play() { + if (!isPlaying) + { + runningTime = 0; + lastTime = ofGetElapsedTimeMillis(); + isPlaying = true; + auto currentSlide = slides[currentSlideIndex]; + enqueueSlide(currentSlide, ofGetElapsedTimeMillis()); + } +} + +void magSlideShowSource::pause() { + isPlaying = false; +} + +void magSlideShowSource::playNextSlide() { + //TODO + // I should check here to see if there are less than two slides. + // If so, we should probably return + + currentSlideIndex += direction; + ofEventArgs args; + + // This makes sure that we are doing a signed integer comparison, + // otherwise things get weird + int num = slides.size(); + switch (settings.loopType) + { + case LoopType::NONE: + if (currentSlideIndex >= slides.size() || currentSlideIndex < 0) + { + // If we are not looping and we are out of bounds, return + // without enqueueing a slide. This will cause the slide show + // to end once the last slide builds out. + return; + } + break; + case LoopType::NORMAL: + if (currentSlideIndex >= num) + { + loopCount++; + if (loopCount == settings.numLoops) + { + // Return without enqueueing a new slide if we have + // reached the max number of loops. + return; + } + currentSlideIndex = 0; + ofNotifyEvent(slideshowWillLoopEvent, args, this); + } + else if (currentSlideIndex < 0) + { + loopCount++; + if (loopCount == settings.numLoops) + { + // Return without enqueueing a new slide if we have + // reached the max number of loops. + return; + } + currentSlideIndex = slides.size()-1; + ofNotifyEvent(slideshowWillLoopEvent, args, this); + } + break; + case LoopType::PING_PONG: + + int num = slides.size(); + if (currentSlideIndex >= num) + { + loopCount++; + if (loopCount == settings.numLoops) + { + // Return without enqueueing a new slide if we have + // reached the max number of loops. + return; + } + + direction = -1; + currentSlideIndex = slides.size()-2; + ofNotifyEvent(slideshowWillLoopEvent, args, this); + } + else if (currentSlideIndex < 0) + { + loopCount++; + if (loopCount == settings.numLoops) + { + // Return without enqueueing a new slide if we have + // reached the max number of loops. + return; + } + + direction = 1; + currentSlideIndex = 1; + ofNotifyEvent(slideshowWillLoopEvent, args, this); + } + break; + } + + enqueueSlide(slides[currentSlideIndex], ofGetElapsedTimeMillis()); +} + +void magSlideShowSource::playPrevSlide() { + currentSlideIndex -= (direction*2); + playNextSlide(); +} + +void magSlideShowSource::playSlide(int slideIndex) { + currentSlideIndex = slideIndex-direction; + playNextSlide(); +} + +void magSlideShowSource::enqueueSlide(std::shared_ptr slide, u_int64_t startTime) { +// ofLogVerbose() << "Enqueuing slide " << currentSlideIndex << " slide id: " << slide->getId(); + slide->start(startTime); + activeSlides.insert(activeSlides.begin(), slide); +} + +void magSlideShowSource::slideStateChanged(const void *sender, ofEventArgs &args) { + magSlide *slide = (magSlide *) sender; + +// ofLogVerbose("slideStateChanged") << "Slide id: " << slide->getId() << " Slide state: " +// << slide->getSlideStateName(); + if (slide->getSlideState() == magSlide::SlideState::BuildOut) + { + // Flag that we need to load the next slide: + doPlayNextSlide = true; + } + +} + +void magSlideShowSource::slideComplete(const void *sender, ofEventArgs &args) { + magSlide *slide = (magSlide *) sender; +// ofLogVerbose() << "Slide Complete. id: " << slide->getId(); + slide->isComplete = true; +} + +void magSlideShowSource::fileAddedListener(const void *sender) { + doInit = true; +} + +void magSlideShowSource::fileRemovedListener(const void *sender) { + doInit = true; +} + + diff --git a/src/Sources/magSlideShowSource.h b/src/Sources/magSlideShowSource.h new file mode 100644 index 0000000..60d541d --- /dev/null +++ b/src/Sources/magSlideShowSource.h @@ -0,0 +1,168 @@ +// +// magSlideShowSource.h +// Copyright (c) 2017 Cristobal Mendoza +// http://cuppetellimendoza.com +// + +#ifndef MAGSLIDESHOWSOURCE_H +#define MAGSLIDESHOWSOURCE_H + +#include "FboSource.h" +#include "magSlide.h" +#include "DirectoryWatcher.h" + +class magSlide; + + +class magSlideShowSource : public ofx::piMapper::FboSource { + public: + magSlideShowSource(); + + /** + * Default settings file name. + */ + static const std::string SettingsFileName; + struct Settings; // forward declaration + bool initialize(magSlideShowSource::Settings settings); + void setup() override; + void update() override; + void draw() override; + + /** + * Removes all slides and then attempts to create a new slide show + * based on the contents of the ofDirectory specified. The files may + * be images or videos, which will be transformed into the appropriate slide type. + * Any other file type in the directory is ignored (including other directories). + * The slide order is alphabetical according to filename. + * + * @param dir The ofDirectory to use as a source for a slide show. + * @return true if at least one slide was created. false is returned + * otherwise. Check the console for the specific error. + */ + bool createFromFolderContents(std::string path); + bool loadFromXml(std::string path); + void addSlide(std::shared_ptr slide); + void play(); + void pause(); + void playNextSlide(); + void playPrevSlide(); + void playSlide(int slideIndex); + + enum LoopType : int { + NONE = 0, + NORMAL, + PING_PONG + }; + + struct Settings { + /** + * The pixel width of the FBO. + */ + float width = 1280; + + /** + * The pixel height of the FBO. + */ + float height = 720; + /** + * An optional default slide duration, in seconds. + * If a slide specifies a duration this value is ignored. + */ + float slideDuration = 5; + + /** + * The default transition for the slide show. + */ + std::string transitionName = "Dissolve"; + + /** + * Default transition duration. + */ + float transitionDuration = 1; + + /** + * If specified, all applicable files in the folder will + * be used as slides in the slide show. They will be ordered + * alphabetically according to their file names. + * + * If path is relative, the root will likely be the Data folder. + */ + std::string slidesFolderPath = "sources/images"; + + /** + * If specified, + */ + std::string slideshowFilePath; + + + /** + * Loop type for the slide show. See @code LoopType for options. + * The default is @code LoopType:None. + */ + LoopType loopType = LoopType::NONE; + + /** + * The number of loops to perform, if the loopType is not NONE. + * If the value is 0 or less than 0, the slide show loops forever. + */ + int numLoops = 0; + + /** + * The resizing option for the slide show. The default is FitProportionally. + * If a slide already has a resizing option applied, that option will be + * respected and this resizeOption will not be used. + */ + magSlide::ResizeOptions resizeOption = magSlide::ResizeOptions::FitProportionally; + }; + + //////////////////////////////////////////// + //// Event Listeners + //////////////////////////////////////////// + void slideStateChanged(const void *sender, ofEventArgs &args); + void slideComplete(const void *sender, ofEventArgs &args); + virtual ~magSlideShowSource(); + + + /** + * Fires when the slide show is done, which happens when + * the loop count is equal to Settings::numLoops, or when + * the last slide is played when @code LoopType::NONE is specified. + * Sender is this slide show. + */ + ofEvent slideshowCompleteEvent; + + + /** + * Fires when the slide show reaches the last slide + * and will perform a loop in the next call. + * Sender is this slide show. + */ + ofEvent slideshowWillLoopEvent; + + protected: + Settings settings; + std::vector> slides; + + private: +// std::shared_ptr currentSlide; + std::vector> activeSlides; + void enqueueSlide(std::shared_ptr slide, u_int64_t startTime); + + u_int64_t lastTime; + u_int64_t deltaTime; + u_int64_t runningTime; + + bool isInitialized = false; + bool isPlaying = false; + int currentSlideIndex = 0; + int direction = 1; + int loopCount = 0; + ofx::piMapper::DirectoryWatcher* directoryWatcher; + void fileAddedListener(const void *sender); + void fileRemovedListener(const void *sender); + bool doInit; + bool doPlayNextSlide = false; +}; + + +#endif diff --git a/src/Sources/magSlideTransition.cpp b/src/Sources/magSlideTransition.cpp new file mode 100644 index 0000000..6c4c9ac --- /dev/null +++ b/src/Sources/magSlideTransition.cpp @@ -0,0 +1,60 @@ +// +// magSlideTransition.cpp +// Copyright (c) 2017 Cristobal Mendoza +// http://cuppetellimendoza.com +// + +#include "magSlideTransition.h" + +void magSlideTransition::start(std::shared_ptr nextSlide) +{ + runningTime = 0; + active = true; + this->nextSlide = nextSlide; +} + +void magSlideTransition::update(u_int64_t timeDelta) +{ + if (!active) return; + + runningTime += timeDelta; + if (runningTime >= duration) + { + ofEventArgs arghh; // arghhhh... + nextSlide->setOpacity(255); + nextSlide->setPosition(0, 0); + end(); + transitionCompleteEvent.notify(this, arghh); + active = false; + } + +} + +u_int64_t magSlideTransition::getRunningTime() +{ + return runningTime; +} + +float magSlideTransition::getNormalizedTime() +{ + return (double)runningTime / (double)duration; +} + + +void magDissolveTransition::draw() +{ + slide->setOpacity(255 - (getNormalizedTime() * 255)); + nextSlide->setOpacity(getNormalizedTime()*255); +} + +void magDissolveTransition::start(std::shared_ptr nextSlide) +{ + magSlideTransition::start(nextSlide); + nextSlide->setOpacity(0); +} + +void magDissolveTransition::end() +{ + nextSlide->setOpacity(255); + slide->setOpacity(0); +} diff --git a/src/Sources/magSlideTransition.h b/src/Sources/magSlideTransition.h new file mode 100644 index 0000000..ecb491b --- /dev/null +++ b/src/Sources/magSlideTransition.h @@ -0,0 +1,129 @@ +// +// magSlideTransition.h +// Copyright (c) 2017 Cristobal Mendoza +// http://cuppetellimendoza.com +// + +#ifndef MAGSLIDETRANSITION_H +#define MAGSLIDETRANSITION_H + +#include "magSlide.h" + +class magSlideTransitionFactory; + +class magSlideTransition +{ +public: + /** + * Subclassing notes: Make sure to provide a value for name in your + * magSlideTransition subclass. + */ + magSlideTransition() { name = "Void"; } + /** + * Begins the transition. This needs to be called in order for the + * transition to do anything. + * @param nextSlide The subsequent slide in the slide show needs to be + * passed here. + * + * You can override this call to set any initial conditions to the transition, + * but make sure to call this method in your override. + */ + virtual void start(std::shared_ptr nextSlide); + + /** + * Called automatically when the transition is complete. Useful to set + * end states for the parameters of the slide and nextSlide. Default implementation + * does nothing. + */ + virtual void end(){} + + /** + * NOTE: The transition settings system is not yet implemented. + * Called when the transition is created. Loads settings for magSlideTransition + * subclasses. The default implementation does nothing. + * @param settings ofParameterGroup with settings for your custom magSlideTransition + * subclass. + */ + virtual void loadSettings(ofParameterGroup &settings){} + + /** + * Updates the transition. + * @param timeDelta The elapsed time (in ms.) between the last call to update() and + * this one (i.e. the frame time). + * + * If you need to override update, make sure to call this implementation + * in your subclass. + */ + virtual void update(u_int64_t timeDelta); + + /** + * Draws the transition. Default implementation does nothing. + */ + virtual void draw(){ + ofLogNotice("magSlideTransition") << "transition draw - this should be overriden " << getNormalizedTime(); + } + + /** + * Current running time in milliseconds. + * @return u_int64_t + */ + u_int64_t getRunningTime(); + + /** + * Returns the current time in normalized form. + * 0 = start, 1 = end. + * @return Float between 0 and 1. + */ + float getNormalizedTime(); + + string const &getName() const + { + return name; + } + + const shared_ptr &getNextSlide() const + { + return nextSlide; + } + + bool isActive() const + { + return active; + } + + /** + * Sender is a raw pointer to this magSlideTransition + */ + ofEvent transitionCompleteEvent; + +protected: + std::string name; + std::shared_ptr slide; + std::shared_ptr nextSlide; + + u_int64_t runningTime; + u_int64_t duration; + u_int64_t endTime; + bool active = false; + + +protected: + + friend class magSlideTransitionFactory; +}; + +class magDissolveTransition : public magSlideTransition +{ +public: + magDissolveTransition() + { + name = "Dissolve"; + } + + void start(std::shared_ptr nextSlide) override; + + void draw() override; + void end() override; +}; + +#endif diff --git a/src/Sources/magSlideTransitionFactory.cpp b/src/Sources/magSlideTransitionFactory.cpp new file mode 100644 index 0000000..1c03a57 --- /dev/null +++ b/src/Sources/magSlideTransitionFactory.cpp @@ -0,0 +1,76 @@ +// +// Created by Cristobal Mendoza on 12/3/17. +// + +#include "magSlideTransitionFactory.h" + +/* + * + * + * +class Base {}; + +class DerivedA : public Base {}; +class DerivedB : public Base {}; +class DerivedC : public Base {}; + +Base* create(const std::string& type) +{ + static std::map> type_creator_map = + { + {"DerivedA", [](){return new DerivedA();}}, + {"DerivedB", [](){return new DerivedB();}}, + {"DerivedC", [](){return new DerivedC();}} + }; + + auto it = type_creator_map.find(type); + if(it != type_creator_map.end()) + { + return it->second(); + } + + return nullptr; +} + */ + +magSlideTransitionFactory* magSlideTransitionFactory::_instance = 0; + +magSlideTransitionFactory::magSlideTransitionFactory() +{ + magSlideTransition voidTransition; + magDissolveTransition dissolve; + + registerTransition(voidTransition); + registerTransition(dissolve); +} + +magSlideTransitionFactory* magSlideTransitionFactory::instance() +{ + if (_instance == 0) + { + _instance = new magSlideTransitionFactory(); + } + + return _instance; +} + +std::shared_ptr +magSlideTransitionFactory::createTransition(std::string transitionName, std::shared_ptr slide, + ofParameterGroup &settings, u_int64_t duration) +{ + std::shared_ptr transition; + + if (transitionsMap.count(transitionName) > 0) + { + transition = transitionsMap[transitionName](); + } + else + { + transition = transitionsMap[transition->getName()](); + } + + transition->slide = slide; + transition->duration = duration; + transition->loadSettings(settings); + return transition; +} diff --git a/src/Sources/magSlideTransitionFactory.h b/src/Sources/magSlideTransitionFactory.h new file mode 100644 index 0000000..cb998b0 --- /dev/null +++ b/src/Sources/magSlideTransitionFactory.h @@ -0,0 +1,41 @@ +// +// Created by Cristobal Mendoza on 12/3/17. +// + +#ifndef MAGSLIDETRANSITIONFACTORY_H +#define MAGSLIDETRANSITIONFACTORY_H + +#include "magSlide.h" +#include "magSlideTransition.h" + +/** + * Factory class to register and instantiate transitions. + */ +class magSlideTransitionFactory +{ +public: + static magSlideTransitionFactory* instance(); + + std::shared_ptr createTransition(string transitionName, + std::shared_ptr slide, + ofParameterGroup &group, + u_int64_t duration); + template + void registerTransition(T transition) + { + if (transitionsMap.count(transition.getName()) == 0) + { + transitionsMap[transition.getName()] = [](){ + return std::make_shared(); + }; + } + } + +protected: + std::unordered_map()>> transitionsMap; +private: + static magSlideTransitionFactory* _instance; + magSlideTransitionFactory(); +}; + +#endif //MAGSLIDETRANSITIONFACTORY_H