From a9287fe824e71566b634ec95082ea56dbf041433 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 13 Jun 2007 20:52:07 +0000 Subject: [PATCH] Added ability to set the keyboard bindings in the RecordaAnimationPathHandler --- include/osgViewer/ViewerEventHandlers | 49 ++++++++++++++++----------- src/osgViewer/ViewerEventHandlers.cpp | 20 ++++++----- 2 files changed, 41 insertions(+), 28 deletions(-) diff --git a/include/osgViewer/ViewerEventHandlers b/include/osgViewer/ViewerEventHandlers index aec2ba108..2a4fda3eb 100644 --- a/include/osgViewer/ViewerEventHandlers +++ b/include/osgViewer/ViewerEventHandlers @@ -147,18 +147,18 @@ public: virtual void getUsage(osg::ApplicationUsage &usage) const; void setKeyEventToggleFullscreen(int key) { _keyEventToggleFullscreen = key; } - int getKeyEventToggleFullscreen() const { return (_keyEventToggleFullscreen); } + int getKeyEventToggleFullscreen() const { return _keyEventToggleFullscreen; } void setToggleFullscreen(bool flag) { _toggleFullscreen = flag; } - bool getToggleFullscreen() const { return (_toggleFullscreen); } + bool getToggleFullscreen() const { return _toggleFullscreen; } void setKeyEventWindowedResolutionUp(int key) { _keyEventWindowedResolutionUp = key; } - int getKeyEventWindowedResolutionUp() const { return (_keyEventWindowedResolutionUp); } + int getKeyEventWindowedResolutionUp() const { return _keyEventWindowedResolutionUp; } void setKeyEventWindowedResolutionDown(int key) { _keyEventWindowedResolutionDown = key; } - int getKeyEventWindowedResolutionDown() const { return (_keyEventWindowedResolutionUp); } + int getKeyEventWindowedResolutionDown() const { return _keyEventWindowedResolutionUp; } void setChangeWindowedResolution(bool flag) { _changeWindowedResolution = flag; } - bool getChangeWindowedResolution() const { return (_changeWindowedResolution); } + bool getChangeWindowedResolution() const { return _changeWindowedResolution; } virtual bool handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa); @@ -190,16 +190,16 @@ public: virtual void getUsage(osg::ApplicationUsage &usage) const; void setKeyEventChangeThreadingModel(int key) { _keyEventChangeThreadingModel = key; } - int getKeyEventChangeThreadingModel() const { return (_keyEventChangeThreadingModel); } + int getKeyEventChangeThreadingModel() const { return _keyEventChangeThreadingModel; } void setChangeThreadingModel(bool flag) { _changeThreadingModel = flag; } - bool getChangeThreadingModel() const { return (_changeThreadingModel); } + bool getChangeThreadingModel() const { return _changeThreadingModel; } void setKeyEventChangeEndBarrierPosition(int key) { _keyEventChangeEndBarrierPosition = key; } - int getKeyEventChangeEndBarrierPosition() const { return (_keyEventChangeEndBarrierPosition); } + int getKeyEventChangeEndBarrierPosition() const { return _keyEventChangeEndBarrierPosition; } void setChangeEndBarrierPosition(bool flag) { _changeEndBarrierPosition = flag; } - bool getChangeEndBarrierPosition() const { return (_changeEndBarrierPosition); } + bool getChangeEndBarrierPosition() const { return _changeEndBarrierPosition; } bool handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa); @@ -228,22 +228,33 @@ public: RecordCameraPathHandler(const std::string &filename = "saved_animation.path"); + void setKeyEventToggleRecord(int key) { _keyEventToggleRecord = key; } + int getKeyEventToggleRecord() const { return _keyEventToggleRecord; } + + void setKeyEventTogglePlayback(int key) { _keyEventTogglePlayback = key; } + int getKeyEventTogglePlayback() const { return _keyEventTogglePlayback; } + virtual void getUsage(osg::ApplicationUsage &usage) const; bool handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa); protected: - std::string _filename; - bool _currentlyRecording; - bool _currentlyPlaying; - double _interval; - double _delta; - osg::Timer_t _animStartTime; - osg::Timer_t _lastFrameTime; - osg::ref_ptr _animPath; - osg::ref_ptr _animPathManipulator; - osg::ref_ptr _oldManipulator; + std::string _filename; + + int _keyEventToggleRecord; + int _keyEventTogglePlayback; + + + bool _currentlyRecording; + bool _currentlyPlaying; + double _interval; + double _delta; + osg::Timer_t _animStartTime; + osg::Timer_t _lastFrameTime; + osg::ref_ptr _animPath; + osg::ref_ptr _animPathManipulator; + osg::ref_ptr _oldManipulator; }; } diff --git a/src/osgViewer/ViewerEventHandlers.cpp b/src/osgViewer/ViewerEventHandlers.cpp index f77e17786..cebf328f6 100644 --- a/src/osgViewer/ViewerEventHandlers.cpp +++ b/src/osgViewer/ViewerEventHandlers.cpp @@ -53,9 +53,9 @@ WindowSizeHandler::WindowSizeHandler() : void WindowSizeHandler::getUsage(osg::ApplicationUsage &usage) const { - usage.addKeyboardMouseBinding("f", "Toggle full screen."); - usage.addKeyboardMouseBinding(">", "Increase the screen resolution (in windowed mode)."); - usage.addKeyboardMouseBinding("<", "Decrease the screen resolution (in windowed mode)."); + usage.addKeyboardMouseBinding(reinterpret_cast(&_keyEventToggleFullscreen), "Toggle full screen."); + usage.addKeyboardMouseBinding(reinterpret_cast(&_keyEventWindowedResolutionUp), "Increase the screen resolution (in windowed mode)."); + usage.addKeyboardMouseBinding(reinterpret_cast(&_keyEventWindowedResolutionDown), "Decrease the screen resolution (in windowed mode)."); } bool WindowSizeHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa) @@ -272,8 +272,8 @@ ThreadingHandler::ThreadingHandler() : void ThreadingHandler::getUsage(osg::ApplicationUsage &usage) const { - usage.addKeyboardMouseBinding("m", "Toggle threading model."); - usage.addKeyboardMouseBinding("e", "Toggle the placement of the end of frame barrier."); + usage.addKeyboardMouseBinding(reinterpret_cast(&_keyEventChangeThreadingModel), "Toggle threading model."); + usage.addKeyboardMouseBinding(reinterpret_cast(&_keyEventChangeEndBarrierPosition), "Toggle the placement of the end of frame barrier."); } bool ThreadingHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa) @@ -345,6 +345,8 @@ bool ThreadingHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIAction RecordCameraPathHandler::RecordCameraPathHandler(const std::string& filename): _filename(filename), + _keyEventToggleRecord('z'), + _keyEventTogglePlayback('Z'), _currentlyRecording(false), _currentlyPlaying(false), _delta(0.0f), @@ -362,8 +364,8 @@ RecordCameraPathHandler::RecordCameraPathHandler(const std::string& filename): void RecordCameraPathHandler::getUsage(osg::ApplicationUsage &usage) const { - usage.addKeyboardMouseBinding("z", "Toggle camera path recording."); - usage.addKeyboardMouseBinding("Z", "Load local camera path recording."); + usage.addKeyboardMouseBinding(reinterpret_cast(&_keyEventToggleRecord), "Toggle camera path recording."); + usage.addKeyboardMouseBinding(reinterpret_cast(&_keyEventTogglePlayback), "Toggle camera path playback."); } bool RecordCameraPathHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa) @@ -380,7 +382,7 @@ bool RecordCameraPathHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GU case(osgGA::GUIEventAdapter::KEYUP): { // The user has requested to toggle recording. - if (ea.getKey() == 'z') + if (ea.getKey() ==_keyEventToggleRecord) { // The user has requested to BEGIN recording. if (!_currentlyRecording) @@ -416,7 +418,7 @@ bool RecordCameraPathHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GU // EXTREMELY dirty, so I opted for a simpler solution. At a later date, someone may // want to implement the original recomendation (which is in a mailing list reply // from June 1st by Robert in a thread called "osgviewer Camera Animation (preliminary)". - else if (ea.getKey() == 'Z') + else if (ea.getKey() == _keyEventTogglePlayback) { if (_currentlyRecording) {