Sirikata
|
00001 /* Sirikata 00002 * InputBindingEvent.hpp 00003 * 00004 * Copyright (c) 2009, Ewen Cheslack-Postava 00005 * All rights reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions are 00009 * met: 00010 * * Redistributions of source code must retain the above copyright 00011 * notice, this list of conditions and the following disclaimer. 00012 * * Redistributions in binary form must reproduce the above copyright 00013 * notice, this list of conditions and the following disclaimer in 00014 * the documentation and/or other materials provided with the 00015 * distribution. 00016 * * Neither the name of Sirikata nor the names of its contributors may 00017 * be used to endorse or promote products derived from this software 00018 * without specific prior written permission. 00019 * 00020 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 00021 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 00022 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 00023 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 00024 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00025 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00026 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00027 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00028 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00029 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00030 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00031 */ 00032 00033 #ifndef _SIRIKATA_INPUT_BINDING_EVENT_HPP_ 00034 #define _SIRIKATA_INPUT_BINDING_EVENT_HPP_ 00035 00036 #include <sirikata/core/util/Platform.hpp> 00037 #include <sirikata/proxyobject/Invokable.hpp> 00038 00039 namespace Sirikata { 00040 namespace SimpleCamera { 00041 00042 class InputBindingEvent { 00043 public: 00044 enum Modifier { 00045 NONE = 0, 00046 SHIFT = 1, 00047 CTRL = 2, 00048 ALT = 4, 00049 SUPER = 8 00050 }; 00051 00052 static InputBindingEvent Key(String button, Modifier mod); 00053 static InputBindingEvent MouseClick(int32 button); 00054 static InputBindingEvent MouseDrag(int32 button); 00055 static InputBindingEvent Axis(uint32 index); 00056 static InputBindingEvent Web(const String& wvname, const String& name); 00057 00058 InputBindingEvent(); 00059 InputBindingEvent(const InputBindingEvent& rhs); 00060 InputBindingEvent(const boost::any& evt); 00061 ~InputBindingEvent(); 00062 00063 bool valid() const; 00064 00065 bool isKey() const; 00066 String keyButton() const; 00067 Modifier keyModifiers() const; 00068 bool keyPressed() const; 00069 bool keyReleased() const; 00070 00071 bool isMouseClick() const; 00072 int32 mouseClickButton() const; 00073 00074 bool isMouseDrag() const; 00075 int32 mouseDragButton() const; 00076 00077 float mouseX() const; 00078 float mouseY() const; 00079 00080 bool isAxis() const; 00081 uint32 axisIndex() const; 00082 float axisValue() const; 00083 00084 bool isWeb() const; 00085 String webViewName() const; 00086 String webName() const; 00087 00088 InputBindingEvent& operator=(const InputBindingEvent& rhs); 00089 00090 String toString() const; 00091 static InputBindingEvent fromString(const String& asString); 00092 00093 // Checks if the events "match", which is looser than being equal, allowing 00094 // a binding to pair an actual event with an event template for a handler. 00095 bool matches(const InputBindingEvent& rhs) const; 00096 00097 bool operator<(const InputBindingEvent& rhs) const; 00098 private: 00099 static String keyModifiersAsString(Modifier m); 00100 static Modifier keyModifiersFromString(const String& s); 00101 00102 // Get a type tag to help with comparisons 00103 int32 typeTag() const; 00104 00105 Invokable::Dict mEvent; 00106 }; 00107 00108 std::istream& operator>>(std::istream& is, Sirikata::SimpleCamera::InputBindingEvent& ibe); 00109 std::ostream& operator<<(std::ostream& os, const Sirikata::SimpleCamera::InputBindingEvent& ibe); 00110 00111 } // namespace SimpleCamera 00112 } // namespace Sirikata 00113 00114 #endif //_SIRIKATA_INPUT_BINDING_EVENT_HPP_