Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

OgreCursorGuiElement.cpp

Go to the documentation of this file.
00001 /*
00002 -----------------------------------------------------------------------------
00003 This source file is part of OGRE
00004     (Object-oriented Graphics Rendering Engine)
00005 For the latest info, see http://www.ogre3d.org/
00006 
00007 Copyright © 2000-2002 The OGRE Team
00008 Also see acknowledgements in Readme.html
00009 
00010 This program is free software you can redistribute it and/or modify it under
00011 the terms of the GNU Lesser General Public License as published by the Free Software
00012 Foundation either version 2 of the License, or (at your option) any later
00013 version.
00014 
00015 This program is distributed in the hope that it will be useful, but WITHOUT
00016 ANY WARRANTY without even the implied warranty of MERCHANTABILITY or FITNESS
00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
00018 
00019 You should have received a copy of the GNU Lesser General Public License along with
00020 this program if not, write to the Free Software Foundation, Inc., 59 Temple
00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
00022 http://www.gnu.org/copyleft/lesser.txt.
00023 -----------------------------------------------------------------------------
00024 */
00025 
00026 #include "OgreCursorGuiElement.h"   
00027 #include "OgreEventProcessor.h" 
00028 #include "OgreInput.h"
00029 #include "OgreOverlayManager.h"
00030 #include "OgreStringConverter.h"
00031 
00032 
00033 namespace Ogre {
00034 
00035     //---------------------------------------------------------------------
00036     String CursorGuiElement::msTypeName = "Cursor";
00037 
00038     CursorGuiElement::CmdOffsetX CursorGuiElement::msCmdOffsetX;
00039     CursorGuiElement::CmdOffsetY CursorGuiElement::msCmdOffsetY;
00040 
00041     CursorGuiElement::CursorGuiElement(const String& name) :
00042         PanelGuiElement(name), mOffsetX(0.0), mOffsetY(0.0)
00043     {
00044         mVisible = false; // cursors are initially hidden
00045 
00046         if (createParamDictionary("CursorGuiElement"))
00047         {
00048             addBaseParameters();
00049         }
00050 
00051         setWidth(0.01);
00052         setHeight(0.01);
00053     }
00054     //---------------------------------------------------------------------
00055     const String& CursorGuiElement::getTypeName(void) const
00056     {
00057         return msTypeName;
00058     }
00059     //---------------------------------------------------------------------
00060     void CursorGuiElement::show(void)
00061     {
00062         if (!mVisible) {
00063             OverlayManager &om = OverlayManager::getSingleton();
00064             setLeft(om.getMouseX() - mOffsetX);
00065             setTop(om.getMouseY() - mOffsetY);
00066             om.addMouseMotionListener(this);
00067         }
00068         PanelGuiElement::show();
00069     }
00070     //---------------------------------------------------------------------
00071     void CursorGuiElement::hide(void)
00072     {
00073         if (mVisible) {
00074             OverlayManager &om = OverlayManager::getSingleton();
00075             om.removeMouseMotionListener(this);
00076         }
00077         PanelGuiElement::hide();
00078     }
00079     //---------------------------------------------------------------------
00080     void CursorGuiElement::setOffsetX(Real x)
00081     {
00082         setLeft(mLeft + mOffsetX - x);
00083         mOffsetX = x;
00084     }
00085     //---------------------------------------------------------------------
00086     void CursorGuiElement::setOffsetY(Real y)
00087     {
00088         setTop(mTop + mOffsetY - y);
00089         mOffsetY = y;
00090     }
00091     //---------------------------------------------------------------------
00092     GuiElement* CursorGuiElement::findElementAt(Real x, Real y)         // relative to parent
00093     {
00094         return NULL;    // override this so it won't find itself!
00095     }
00096     //---------------------------------------------------------------------
00097     void CursorGuiElement::mouseMoved(MouseEvent* e)
00098     {
00099         setLeft(e->getX() - mOffsetX);
00100         setTop(e->getY() - mOffsetY);
00101     }
00102     //---------------------------------------------------------------------
00103     void CursorGuiElement::mouseDragged(MouseEvent* e)
00104     {
00105         mouseMoved(e);
00106     }
00107     //---------------------------------------------------------------------
00108     void CursorGuiElement::addBaseParameters(void)
00109     {
00110         PanelGuiElement::addBaseParameters();
00111         ParamDictionary* dict = getParamDictionary();
00112 
00113         dict->addParameter(ParameterDef("x_offset", 
00114             "Specifies the x offset that will be added to the mouse coordinates.", PT_STRING),
00115             &msCmdOffsetX);
00116         dict->addParameter(ParameterDef("y_offset", 
00117             "Specifies the y offset that will be added to the mouse coordinates.", PT_STRING),
00118             &msCmdOffsetY);
00119     }
00120     //-----------------------------------------------------------------------
00121     String CursorGuiElement::CmdOffsetX::doGet(const void* target) const
00122     {
00123         return StringConverter::toString(
00124                 static_cast<const CursorGuiElement*>(target)->getOffsetX() );
00125     }
00126     void CursorGuiElement::CmdOffsetX::doSet(void* target, const String& val)
00127     {
00128         static_cast<CursorGuiElement*>(target)->setOffsetX(StringConverter::parseReal(val));
00129     }
00130     //-----------------------------------------------------------------------
00131     String CursorGuiElement::CmdOffsetY::doGet(const void* target) const
00132     {
00133         return StringConverter::toString(
00134                 static_cast<const CursorGuiElement*>(target)->getOffsetY() );
00135     }
00136     void CursorGuiElement::CmdOffsetY::doSet(void* target, const String& val)
00137     {
00138         static_cast<CursorGuiElement*>(target)->setOffsetY(StringConverter::parseReal(val));
00139     }
00140 
00141 }
00142 

Copyright © 2002-2003 by The OGRE Team
Last modified Sun Nov 28 19:48:18 2004