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

183 lines
4.5 KiB

#pragma once
#include <string>
// OpenFrameworks components
#include "ofEvents.h"
#include "ofLog.h"
// OfxPiMapper Components
#include "FboSource.h"
#include "Info.h"
#include "SurfaceStack.h"
#include "Gui.h"
#include "Vec2.h"
// Commands
#include "SetApplicationModeCmd.h"
#include "ClearSurfacesCmd.h"
#include "SetPresetCmd.h"
#include "AddSurfaceCmd.h"
#include "RmSurfaceCmd.h"
#include "MvLayerUpCmd.h"
#include "MvLayerDnCmd.h"
#include "DuplicateSurfaceCmd.h"
#include "FullscreenSurfaceCmd.h"
#include "TogglePerspectiveCmd.h"
#include "SetNextSourceCmd.h"
#include "ScaleSurfaceFromToCmd.h"
#include "AddGridRowCmd.h"
#include "RmGridRowCmd.h"
#include "AddGridColCmd.h"
#include "RmGridColCmd.h"
#include "SelNextSurfaceCmd.h"
#include "SelPrevSurfaceCmd.h"
#include "SelNextVertexCmd.h"
#include "SelPrevVertexCmd.h"
#include "SelVertexCmd.h"
#include "SelSurfaceCmd.h"
#include "MvSelectionCmd.h"
#include "ToggleAnimatedSourceCmd.h"
#include "SelNextTexCoordCmd.h"
#include "SelPrevTexCoordCmd.h"
#include "DeselectSurfaceCmd.h"
#include "SetVideoSourceCmd.h"
// Modes
#include "ApplicationBaseMode.h"
#include "PresentationMode.h"
#include "ProjectionMappingMode.h"
#include "TextureMappingMode.h"
#include "SourceSelectionMode.h"
// TODO: Move all command executors to here (Application class)
// This would allow one not to repeat. Commands would be called in
// one place and includes of commands would not be duplicated.
#define PIMAPPER_SETTINGS_FILE "ofxpimapper.xml"
namespace ofx {
namespace piMapper {
class ApplicationBaseMode;
class Application {
public:
Application();
ApplicationBaseMode * getState();
void setup();
void update();
void draw();
void onKeyPressed(ofKeyEventArgs & args);
void onKeyReleased(ofKeyEventArgs & args);
// We use this to pass mouse events into the GUI layer
void onMousePressed(ofMouseEventArgs & args);
void onMouseReleased(ofMouseEventArgs & args);
void onMouseDragged(ofMouseEventArgs & args);
// Then we catch GUI events with this one and create commands
void onJointPressed(GuiJointEvent & e);
void onSurfacePressed(GuiSurfaceEvent & e);
void onBackgroundPressed(GuiBackgroundEvent & e);
void onGuiEvent(GuiEvent & e);
void addFboSource(FboSource & fboSource);
void addFboSource(FboSource * fboSource);
void createSurface(SurfaceType type);
void eraseSurface(int i);
void setInfoText(std::string text);
void toggleInfo();
void togglePerspective();
void saveProject();
bool loadXmlSettings(std::string fileName);
bool isShiftKeyDown();
bool toggleShift();
SurfaceManager * getSurfaceManager(){ return &_surfaceManager; }
CmdManager * getCmdManager(){ return &_cmdManager; }
MediaServer * getMediaServer(){ return &_mediaServer; }
// Command executors
void selectSurface(int i);
void selectNextSurface();
void selectPrevSurface();
void selectNextVertex();
void selectPrevVertex();
void selectVertex(int surface, int vertex);
void selectNextTexCoord();
void selectPrevTexCoord();
/*
Context sensitive move.
Moves vertex when in projection mapping mode.
Moves texture coordinate when in texture mapping mode.
*/
void moveSelection(Vec3 by);
void setPresentationMode();
void setTextureMode();
void setProjectionMode();
void setSourceMode();
void moveLayerUp();
void moveLayerDown();
void scaleUp();
void scaleDown();
void duplicateSurface();
void setFullscreenSurface();
void setNextSource();
void setFboSource(std::string sourceId);
void setVideoSource(std::string fileName, bool loop);
void setImageSource(std::string fileName);
void setDrawGui(bool drawGui);
void addGridRow();
void addGridColumn();
void removeGridRow();
void removeGridColumn();
void togglePause();
void moveTexCoord(int texCoordIndex, Vec2 by);
// TODO: Add moveVertex.
// Make it so that other parts of the application react to the change.
void undo();
void deselect();
void toggleLayerPanel();
void setPreset(unsigned int i);
void setNextPreset();
// System commands
void reboot();
void shutdown();
protected:
void setState(ApplicationBaseMode * st);
private:
friend class ApplicationBaseMode;
friend class SetApplicationModeCmd;
ApplicationBaseMode * _state;
CmdManager _cmdManager;
MediaServer _mediaServer;
SurfaceManager _surfaceManager;
Info _info;
bool _shiftKeyDown;
bool _drawGui;
float _lastSaveTime;
float _autoSaveInterval;
std::string _keySequence;
};
} // namespace piMapper
} // namespace ofx