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

# OgreBorderButtonGuiElement.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 "OgreBorderButtonGuiElement.h"
    00027 //#include "OgreActionEvent.h"
    00028 //#include "OgreMouseEvent.h"
    00029 #include "OgreGuiManager.h"
    00030
    00031
    00032 namespace Ogre {
    00033
    00034     //-----------------------------------------------------------------------
    00035     String BorderButtonGuiElement::msTypeName = "BorderButton";
    00036     BorderButtonGuiElement::CmdBorderDownMaterial BorderButtonGuiElement::msCmdBorderDownMaterial;
    00037     BorderButtonGuiElement::CmdBorderUpMaterial BorderButtonGuiElement::msCmdBorderUpMaterial;
    00038     BorderButtonGuiElement::CmdBorderHiliteDownMaterial BorderButtonGuiElement::msCmdBorderHiliteDownMaterial;
    00039     BorderButtonGuiElement::CmdBorderHiliteUpMaterial BorderButtonGuiElement::msCmdBorderHiliteUpMaterial;
    00040     BorderButtonGuiElement::CmdBorderDisabledMaterial BorderButtonGuiElement::msCmdBorderDisabledMaterial;
    00041     BorderButtonGuiElement::CmdBorderButtonCaption BorderButtonGuiElement::msCmdBorderButtonCaption;
    00042
    00043     //-----------------------------------------------------------------------
    00044     BorderButtonGuiElement::BorderButtonGuiElement(const String& name) :
    00045         BorderPanelGuiElement(name),
    00046         GuiPressable(name)
    00047     {
    00048         mButtonDown = false;
    00049         mChildrenProcessEvents = false;
    00050
    00051         mBorderDownMaterialName = "";
    00052         mBorderUpMaterialName = "";
    00053         mBorderHiliteDownMaterialName = "";
    00054         mBorderHiliteUpMaterialName = "";
    00055         mBorderDisabledMaterialName = "";
    00056
    00057         mInsideObject = 0;
    00058
    00059         if (createParamDictionary("BorderButtonGuiElement"))
    00060         {
    00061             addBaseParameters();
    00062         }
    00063         setSource(this);
    00064     }
    00065
    00066     //-----------------------------------------------------------------------
    00067     void BorderButtonGuiElement::processEvent(InputEvent* e)
    00068     {
    00069         BorderPanelGuiElement::processEvent(e);
    00070
    00071         updateMaterials();
    00072     }
    00073
    00074     //-----------------------------------------------------------------------
    00075     void BorderButtonGuiElement::updateMaterials(bool init)
    00076     {
    00077         bool buttonStatus;
    00078
    00079         // did the button's status change between last time
    00080         buttonStatus = (mButtonDown != (isPressed() && isMouseWithin()));
    00081
    00082         mButtonDown = (isPressed() && isMouseWithin());
    00083
    00084         String borderMaterialName;
    00085
    00086         if (mMouseWithin)
    00087         {
    00088             if (mButtonDown)
    00089                 borderMaterialName = mBorderHiliteDownMaterialName;
    00090             else
    00091                 borderMaterialName = mBorderHiliteUpMaterialName;
    00092
    00093             if (borderMaterialName.empty())
    00094             {
    00095                 if (mButtonDown)
    00096                     borderMaterialName = mBorderDownMaterialName;
    00097                 else
    00098                     borderMaterialName = mBorderUpMaterialName;
    00099             }
    00100         }
    00101         else
    00102         {
    00103             if (mButtonDown)
    00104                 borderMaterialName = mBorderDownMaterialName;
    00105             else
    00106                 borderMaterialName = mBorderUpMaterialName;
    00107         }
    00108
    00109         BorderPanelGuiElement::setBorderMaterialName(borderMaterialName);
    00110
    00111         if (buttonStatus && !init)
    00112         {
    00113             ChildIterator it = getChildIterator();
    00114             while (it.hasMoreElements())
    00115             {
    00116                 if (mMetricsMode == GMM_PIXELS)
    00117                     changeChild(it.getNext(), ((mButtonDown)?1:-1));
    00118                 else
    00119                     changeChild(it.getNext(), ((mButtonDown)?0.003:-0.003));
    00120             }
    00121         }
    00122     }
    00123
    00124     //-----------------------------------------------------------------------
    00125     void BorderButtonGuiElement::changeChild(GuiElement* e, Real add)
    00126     {
    00127         e->setLeft(e->getLeft() + add);
    00128         e->setTop(e->getTop() + add);
    00129
    00130         e->setWidth(e->getWidth() - 2 * add);
    00131         e->setHeight(e->getHeight() - 2 * add);
    00132     }
    00133
    00134     //---------------------------------------------------------------------
    00135     void BorderButtonGuiElement::addBaseParameters(void)
    00136     {
    00137         BorderPanelGuiElement::addBaseParameters();
    00138         ParamDictionary* dict = getParamDictionary();
    00139
    00140         dict->addParameter(ParameterDef("border_down_material",
    00141             "The material to use for the border when the button is down."
    00142             , PT_STRING),
    00143             &BorderButtonGuiElement::msCmdBorderDownMaterial);
    00144
    00145         dict->addParameter(ParameterDef("border_up_material",
    00146             "The material to use for the border when the button is up."
    00147             , PT_STRING),
    00148             &BorderButtonGuiElement::msCmdBorderUpMaterial);
    00149
    00150         dict->addParameter(ParameterDef("border_hilited_down_material",
    00151             "The highlighted material to use for the border when the button is down."
    00152             , PT_STRING),
    00153             &BorderButtonGuiElement::msCmdBorderHiliteDownMaterial);
    00154
    00155         dict->addParameter(ParameterDef("border_hilited_up_material",
    00156             "The highlighted material to use for the border when the button is up."
    00157             , PT_STRING),
    00158             &BorderButtonGuiElement::msCmdBorderHiliteUpMaterial);
    00159
    00160         dict->addParameter(ParameterDef("border_disabled_material",
    00161             "The material to use for the border when the button is disabled."
    00162             , PT_STRING),
    00163             &BorderButtonGuiElement::msCmdBorderDisabledMaterial);
    00164
    00165         dict->addParameter(ParameterDef("caption",
    00166             "The text in the middle of the button."
    00167             , PT_STRING),
    00168             &BorderButtonGuiElement::msCmdBorderButtonCaption);
    00169     }
    00170
    00171
    00172     //-----------------------------------------------------------------------
    00173     void BorderButtonGuiElement::setBorderDownMaterialName(const String& name)
    00174     {
    00175         mBorderDownMaterialName = name;
    00176
    00177     }
    00178     //-----------------------------------------------------------------------
    00179     void BorderButtonGuiElement::setBorderUpMaterialName(const String& name)
    00180     {
    00181         mBorderUpMaterialName = name;
    00182         setPressed(false);
    00183         updateMaterials(true);
    00184     }
    00185
    00186     //-----------------------------------------------------------------------
    00187     void BorderButtonGuiElement::setBorderHiliteDownMaterialName(const String& name)
    00188     {
    00189         mBorderHiliteDownMaterialName = name;
    00190     }
    00191     //-----------------------------------------------------------------------
    00192     void BorderButtonGuiElement::setBorderHiliteUpMaterialName(const String& name)
    00193     {
    00194         mBorderHiliteUpMaterialName = name;
    00195     }
    00196     //-----------------------------------------------------------------------
    00197     void BorderButtonGuiElement::setBorderDisabledMaterialName(const String& name)
    00198     {
    00199         mBorderDisabledMaterialName = name;
    00200     }
    00201
    00202     //---------------------------------------------------------------------
    00203     const String& BorderButtonGuiElement::getBorderDownMaterialName(void) const
    00204     {
    00205         return mBorderDownMaterialName;
    00206     }
    00207     //---------------------------------------------------------------------
    00208     const String& BorderButtonGuiElement::getBorderUpMaterialName(void) const
    00209     {
    00210         return mBorderUpMaterialName;
    00211     }
    00212     //---------------------------------------------------------------------
    00213     const String& BorderButtonGuiElement::getBorderHiliteDownMaterialName(void) const
    00214     {
    00215         return mBorderHiliteDownMaterialName;
    00216     }
    00217     //---------------------------------------------------------------------
    00218     const String& BorderButtonGuiElement::getBorderHiliteUpMaterialName(void) const
    00219     {
    00220         return mBorderHiliteUpMaterialName;
    00221     }
    00222     //---------------------------------------------------------------------
    00223     const String& BorderButtonGuiElement::getBorderDisabledMaterialName(void) const
    00224     {
    00225         return mBorderDisabledMaterialName;
    00226     }
    00227
    00228     //-----------------------------------------------------------------------
    00229     void BorderButtonGuiElement::setButtonCaption(const String& templateName, const String& name)
    00230     {
    00231         if (mInsideObject)
    00232         {
    00233             removeChild(mInsideObject->getName());
    00234             GuiManager::getSingleton().destroyGuiElement(mInsideObject);
    00235             mInsideObject = NULL;
    00236         }
    00237         if (name == "")
    00238         {
    00239             return;
    00240
    00241         }
    00242         mInsideObject =
    00243             GuiManager::getSingleton().createGuiElementFromTemplate(templateName, "", mName + "/caption");
    00244
    00245         // change left/top etc to relative
    00246 //      mInsideObject->setLeft(mInsideObject->getLeft()*mWidth);
    00247 //      mInsideObject->setWidth(mInsideObject->getWidth()*mWidth);
    00248 //      mInsideObject->setTop(mInsideObject->getTop()*mHeight);
    00249 //      mInsideObject->setWidth(mInsideObject->getHeight()*mHeight);
    00250         mInsideObject->setCaption(name);
    00251
    00252         // do not make this cloneable, otherwise there will be 2 copies of it when it is cloned,
    00253         // one copy when the children are copied, and another copy when setButtonCaption is set.
    00254         mInsideObject->setCloneable(false);
    00255
    00256         addChild((GuiContainer*)mInsideObject);
    00257
    00258     }
    00259     //-----------------------------------------------------------------------
    00260     String BorderButtonGuiElement::getButtonCaption() const
    00261     {
    00262         return (mInsideObject)?mInsideObject->getCaption():String("");
    00263     }
    00264
    00265     //---------------------------------------------------------------------
    00266     //---------------------------------------------------------------------
    00267     // Command objects
    00268     //---------------------------------------------------------------------
    00269
    00270     //-----------------------------------------------------------------------
    00271     String BorderButtonGuiElement::CmdBorderDownMaterial::doGet(const void* target) const
    00272     {
    00273         // No need right now..
    00274         return static_cast<const BorderButtonGuiElement*>(target)->getBorderDownMaterialName();
    00275     }
    00276     //-----------------------------------------------------------------------
    00277     void BorderButtonGuiElement::CmdBorderDownMaterial::doSet(void* target, const String& val)
    00278     {
    00279         std::vector<String> vec = StringUtil::split(val);
    00280
    00281         static_cast<BorderButtonGuiElement*>(target)->setBorderDownMaterialName(val);
    00282     }
    00283     //-----------------------------------------------------------------------
    00284     String BorderButtonGuiElement::CmdBorderUpMaterial::doGet(const void* target) const
    00285     {
    00286         // No need right now..
    00287         return static_cast<const BorderButtonGuiElement*>(target)->getBorderUpMaterialName();
    00288     }
    00289     //-----------------------------------------------------------------------
    00290     void BorderButtonGuiElement::CmdBorderUpMaterial::doSet(void* target, const String& val)
    00291     {
    00292         std::vector<String> vec = StringUtil::split(val);
    00293
    00294         static_cast<BorderButtonGuiElement*>(target)->setBorderUpMaterialName(val);
    00295     }
    00296     //-----------------------------------------------------------------------
    00297     String BorderButtonGuiElement::CmdBorderHiliteDownMaterial::doGet(const void* target) const
    00298     {
    00299         // No need right now..
    00300         return static_cast<const BorderButtonGuiElement*>(target)->getBorderHiliteDownMaterialName();
    00301     }
    00302     //-----------------------------------------------------------------------
    00303     void BorderButtonGuiElement::CmdBorderHiliteDownMaterial::doSet(void* target, const String& val)
    00304     {
    00305         std::vector<String> vec = StringUtil::split(val);
    00306
    00307         static_cast<BorderButtonGuiElement*>(target)->setBorderHiliteDownMaterialName(val);
    00308     }
    00309     //-----------------------------------------------------------------------
    00310     String BorderButtonGuiElement::CmdBorderHiliteUpMaterial::doGet(const void* target) const
    00311     {
    00312         // No need right now..
    00313         return static_cast<const BorderButtonGuiElement*>(target)->getBorderHiliteUpMaterialName();
    00314     }
    00315     //-----------------------------------------------------------------------
    00316     void BorderButtonGuiElement::CmdBorderHiliteUpMaterial::doSet(void* target, const String& val)
    00317     {
    00318         std::vector<String> vec = StringUtil::split(val);
    00319
    00320         static_cast<BorderButtonGuiElement*>(target)->setBorderHiliteUpMaterialName(val);
    00321     }
    00322     //-----------------------------------------------------------------------
    00323     String BorderButtonGuiElement::CmdBorderDisabledMaterial::doGet(const void* target) const
    00324     {
    00325         // No need right now..
    00326         return static_cast<const BorderButtonGuiElement*>(target)->getBorderDisabledMaterialName();
    00327     }
    00328     //-----------------------------------------------------------------------
    00329     void BorderButtonGuiElement::CmdBorderDisabledMaterial::doSet(void* target, const String& val)
    00330     {
    00331         std::vector<String> vec = StringUtil::split(val);
    00332
    00333         static_cast<BorderButtonGuiElement*>(target)->setBorderDisabledMaterialName(val);
    00334     }
    00335     //-----------------------------------------------------------------------
    00336     String BorderButtonGuiElement::CmdBorderButtonCaption::doGet(const void* target) const
    00337     {
    00338         // No need right now..
    00339         return static_cast<const BorderButtonGuiElement*>(target)->getButtonCaption();
    00340     }
    00341     //-----------------------------------------------------------------------
    00342     void BorderButtonGuiElement::CmdBorderButtonCaption::doSet(void* target, const String& val)
    00343     {
    00344         std::vector<String> vec = StringUtil::split(val, "\t\n ", 1);
    00345
    00346
    00347         if (vec.size() < 2)
    00348         {
    00349             static_cast<BorderButtonGuiElement*>(target)->setButtonCaption(val, String(""));
    00350         }
    00351         else
    00352         {
    00353             static_cast<BorderButtonGuiElement*>(target)->setButtonCaption(vec[0], vec[1]);
    00354         }
    00355     }
    00356     //---------------------------------------------------------------------
    00357     const String& BorderButtonGuiElement::getTypeName(void) const
    00358     {
    00359         return msTypeName;
    00360     }
    00361
    00362 }

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