diff --git a/code/nel/include/nel/gui/ctrl_button.h b/code/nel/include/nel/gui/ctrl_button.h index dbeb8fa0a..f3367968b 100644 --- a/code/nel/include/nel/gui/ctrl_button.h +++ b/code/nel/include/nel/gui/ctrl_button.h @@ -25,77 +25,77 @@ namespace NLGUI { class CEventDescriptor; -} -/** - * - * \author Nicolas Brigand - * \author Nevrax France - * \date 2002 - */ -class CCtrlButton : public CCtrlBaseButton -{ -public: - - /// Constructor - CCtrlButton(const TCtorParam ¶m) : CCtrlBaseButton(param) + /** + * + * \author Nicolas Brigand + * \author Nevrax France + * \date 2002 + */ + class CCtrlButton : public CCtrlBaseButton { - _Scale = false; - _Align = 0; - } + public: - // Init part - virtual bool parse (xmlNodePtr cur,CInterfaceGroup * parentGroup); + /// Constructor + CCtrlButton(const TCtorParam ¶m) : CCtrlBaseButton(param) + { + _Scale = false; + _Align = 0; + } - virtual void updateCoords(); + // Init part + virtual bool parse (xmlNodePtr cur,CInterfaceGroup * parentGroup); - virtual uint32 getMemory() { return (uint32)(sizeof(*this)+_Id.size()); } + virtual void updateCoords(); - virtual bool getMouseOverShape(std::string &/* texName */, uint8 &/* rot */, NLMISC::CRGBA &/* col */); + virtual uint32 getMemory() { return (uint32)(sizeof(*this)+_Id.size()); } - // Display part - virtual void draw(); + virtual bool getMouseOverShape(std::string &/* texName */, uint8 &/* rot */, NLMISC::CRGBA &/* col */); - void setTexture (const std::string&name); - void setTexturePushed (const std::string&name); - void setTextureOver (const std::string&name); + // Display part + virtual void draw(); - void fitTexture(); + void setTexture (const std::string&name); + void setTexturePushed (const std::string&name); + void setTextureOver (const std::string&name); - std::string getTexture () const; - std::string getTexturePushed () const; - std::string getTextureOver() const; + void fitTexture(); - bool isTextureValid() const { return _TextureIdNormal != -1; } + std::string getTexture () const; + std::string getTexturePushed () const; + std::string getTextureOver() const; - // test if the texture must scale - bool getScale() const { return _Scale; } - void setScale(bool scale) { _Scale = scale; } + bool isTextureValid() const { return _TextureIdNormal != -1; } + + // test if the texture must scale + bool getScale() const { return _Scale; } + void setScale(bool scale) { _Scale = scale; } - /// \from CInterfaceElement - sint32 getMaxUsedW() const; - sint32 getMinUsedW() const; + /// \from CInterfaceElement + sint32 getMaxUsedW() const; + sint32 getMinUsedW() const; - REFLECT_EXPORT_START(CCtrlButton, CCtrlBaseButton) - REFLECT_STRING("texture", getTexture, setTexture); - REFLECT_STRING("texture_pushed", getTexturePushed, setTexturePushed); - REFLECT_STRING("texture_over", getTextureOver, setTextureOver); - REFLECT_BOOL("scale", getScale, setScale); - REFLECT_EXPORT_END + REFLECT_EXPORT_START(CCtrlButton, CCtrlBaseButton) + REFLECT_STRING("texture", getTexture, setTexture); + REFLECT_STRING("texture_pushed", getTexturePushed, setTexturePushed); + REFLECT_STRING("texture_over", getTextureOver, setTextureOver); + REFLECT_BOOL("scale", getScale, setScale); + REFLECT_EXPORT_END -protected: + protected: - CViewRenderer::CTextureId _TextureIdNormal; - CViewRenderer::CTextureId _TextureIdPushed; - CViewRenderer::CTextureId _TextureIdOver; + CViewRenderer::CTextureId _TextureIdNormal; + CViewRenderer::CTextureId _TextureIdPushed; + CViewRenderer::CTextureId _TextureIdOver; -private: + private: - bool _Scale; - sint32 _Align; /// 1st bit - Left/Right (0/1) 2nd bit - Bottom/Top (0/1) -}; + bool _Scale; + sint32 _Align; /// 1st bit - Left/Right (0/1) 2nd bit - Bottom/Top (0/1) + }; +} #endif // RZ_CTRL_BUTTON_H diff --git a/code/nel/src/gui/ctrl_button.cpp b/code/nel/src/gui/ctrl_button.cpp index 6be493cf8..3890065b0 100644 --- a/code/nel/src/gui/ctrl_button.cpp +++ b/code/nel/src/gui/ctrl_button.cpp @@ -14,9 +14,6 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - - - #include "nel/gui/ctrl_button.h" #include "nel/misc/xml_auto_ptr.h" #include "nel/gui/widget_manager.h" @@ -29,139 +26,158 @@ using namespace NL3D; NLMISC_REGISTER_OBJECT(CViewBase, CCtrlButton, std::string, "button"); -// ---------------------------------------------------------------------------- -bool CCtrlButton::parse(xmlNodePtr cur, CInterfaceGroup * parentGroup) +namespace NLGUI { - CXMLAutoPtr prop; - //try to get props that can be inherited from groups - //if a property is not defined, try to find it in the parent group. - //if it is undefined, set it to zero - if (! CCtrlBaseButton::parse(cur,parentGroup) ) + + // ---------------------------------------------------------------------------- + bool CCtrlButton::parse(xmlNodePtr cur, CInterfaceGroup * parentGroup) { - string tmp = "cannot parse view:"+getId()+", parent:"+parentGroup->getId(); - nlinfo(tmp.c_str()); - return false; - } - - - // *** Read Textures - prop = (char*) xmlGetProp( cur, (xmlChar*)"tx_normal" ); - if (prop) - { - string TxName = (const char *) prop; - TxName = strlwr(TxName); - _TextureIdNormal.setTexture(TxName.c_str()); - } - - prop = (char*) xmlGetProp( cur, (xmlChar*)"tx_pushed" ); - if (prop) - { - string TxName = (const char *) prop; - TxName = strlwr(TxName); - _TextureIdPushed.setTexture(TxName.c_str()); - } - - prop = (char*) xmlGetProp( cur, (xmlChar*)"tx_over" ); - if (prop) - { - string TxName = (const char *) prop; - TxName = strlwr(TxName); - _TextureIdOver.setTexture(TxName.c_str()); - } - - // *** Misc. - prop = (char*) xmlGetProp( cur, (xmlChar*)"scale" ); - _Scale = false; - if (prop) - _Scale = convertBool(prop); - - - prop = (char*) xmlGetProp (cur, (xmlChar*)"align"); - _Align = 0; - if (prop) - { - const char *seekPtr = prop.getDatas(); - while (*seekPtr != 0) + CXMLAutoPtr prop; + //try to get props that can be inherited from groups + //if a property is not defined, try to find it in the parent group. + //if it is undefined, set it to zero + if (! CCtrlBaseButton::parse(cur,parentGroup) ) { - if ((*seekPtr=='l')||(*seekPtr=='L')) - _Align &= ~1; - if ((*seekPtr=='r')||(*seekPtr=='R')) - _Align |= 1; - if ((*seekPtr=='b')||(*seekPtr=='B')) - _Align &= ~2; - if ((*seekPtr=='t')||(*seekPtr=='T')) - _Align |= 2; - ++seekPtr; + string tmp = "cannot parse view:"+getId()+", parent:"+parentGroup->getId(); + nlinfo(tmp.c_str()); + return false; } - } - return true; -} - -// ---------------------------------------------------------------------------- -void CCtrlButton::draw () -{ - sint32 nTxId = -1; - CRGBA color; - - CViewRenderer &rVR = *CViewRenderer::getInstance(); - CRGBA globalColor= CWidgetManager::getInstance()->getGlobalColorForContent(); - - // *** Detect Over - bool lastOver = false; - - updateOver(lastOver); - - - sint32 x = _XReal; - sint32 y = _YReal; - sint32 txw, txh; - // the pointer is over the button - if (_Scale) - { - x = _XReal; - y = _YReal; - txw = _WReal; - txh = _HReal; - } - else - { - x = _XReal; - y = _YReal; - } - - switch(_Type) - { - case ToggleButton: + // *** Read Textures + prop = (char*) xmlGetProp( cur, (xmlChar*)"tx_normal" ); + if (prop) { - if (_Pushed) + string TxName = (const char *) prop; + TxName = strlwr(TxName); + _TextureIdNormal.setTexture(TxName.c_str()); + } + + prop = (char*) xmlGetProp( cur, (xmlChar*)"tx_pushed" ); + if (prop) + { + string TxName = (const char *) prop; + TxName = strlwr(TxName); + _TextureIdPushed.setTexture(TxName.c_str()); + } + + prop = (char*) xmlGetProp( cur, (xmlChar*)"tx_over" ); + if (prop) + { + string TxName = (const char *) prop; + TxName = strlwr(TxName); + _TextureIdOver.setTexture(TxName.c_str()); + } + + // *** Misc. + prop = (char*) xmlGetProp( cur, (xmlChar*)"scale" ); + _Scale = false; + if (prop) + _Scale = convertBool(prop); + + + prop = (char*) xmlGetProp (cur, (xmlChar*)"align"); + _Align = 0; + if (prop) + { + const char *seekPtr = prop.getDatas(); + while (*seekPtr != 0) { - nTxId = _TextureIdPushed; - color = getCurrentColorPushed(globalColor); - } - else - { - nTxId = _TextureIdNormal; - color = getCurrentColorNormal(globalColor); + if ((*seekPtr=='l')||(*seekPtr=='L')) + _Align &= ~1; + if ((*seekPtr=='r')||(*seekPtr=='R')) + _Align |= 1; + if ((*seekPtr=='b')||(*seekPtr=='B')) + _Align &= ~2; + if ((*seekPtr=='t')||(*seekPtr=='T')) + _Align |= 2; + ++seekPtr; } } - break; - case RadioButton: - { -// CViewPointer &rIP = *CInterfaceManager::getInstance()->getPointer(); - // Init the radio button - initRBRef(); - if (*_RBRef == this) + + return true; + } + + // ---------------------------------------------------------------------------- + void CCtrlButton::draw () + { + sint32 nTxId = -1; + CRGBA color; + + CViewRenderer &rVR = *CViewRenderer::getInstance(); + CRGBA globalColor= CWidgetManager::getInstance()->getGlobalColorForContent(); + + // *** Detect Over + bool lastOver = false; + + updateOver(lastOver); + + + sint32 x = _XReal; + sint32 y = _YReal; + sint32 txw, txh; + // the pointer is over the button + if (_Scale) + { + x = _XReal; + y = _YReal; + txw = _WReal; + txh = _HReal; + } + else + { + x = _XReal; + y = _YReal; + } + + switch(_Type) + { + case ToggleButton: { - // if it is equal to the ref value, then the button must appear pushed - nTxId = _TextureIdPushed; - color = getCurrentColorPushed(globalColor); + if (_Pushed) + { + nTxId = _TextureIdPushed; + color = getCurrentColorPushed(globalColor); + } + else + { + nTxId = _TextureIdNormal; + color = getCurrentColorNormal(globalColor); + } } - else + break; + case RadioButton: { - if ((_Over) && (CWidgetManager::getInstance()->getCapturePointerLeft() == this)) + // CViewPointer &rIP = *CInterfaceManager::getInstance()->getPointer(); + // Init the radio button + initRBRef(); + + if (*_RBRef == this) + { + // if it is equal to the ref value, then the button must appear pushed + nTxId = _TextureIdPushed; + color = getCurrentColorPushed(globalColor); + } + else + { + if ((_Over) && (CWidgetManager::getInstance()->getCapturePointerLeft() == this)) + { + nTxId = _TextureIdPushed; + color = getCurrentColorPushed(globalColor); + } + else + { + nTxId = _TextureIdNormal; + color = getCurrentColorNormal(globalColor); + _Pushed = false; + } + } + } + break; + case PushButton: + { + if (_Over && (CWidgetManager::getInstance()->getCapturePointerLeft() == this)) { nTxId = _TextureIdPushed; color = getCurrentColorPushed(globalColor); @@ -173,175 +189,162 @@ void CCtrlButton::draw () _Pushed = false; } } + break; + default: + break; } - break; - case PushButton: + + color.A = (uint8)(((sint32)color.A*((sint32)globalColor.A+1))>>8); + + // Fromzen ? + if (getFrozen() && getFrozenHalfTone()) + color.A >>= 2; + + if (!_Scale) { - if (_Over && (CWidgetManager::getInstance()->getCapturePointerLeft() == this)) + CViewRenderer::getInstance()->getTextureSizeFromId (nTxId, txw, txh); + if (_Align&1) + x = x + _WReal - txw; + if (_Align&2) + y = y + _HReal - txh; + } + rVR.drawRotFlipBitmap ( _RenderLayer, x, y, txw, txh, + 0, false, + nTxId, + color ); + + if ((_OverWhenPushed == false) && (_Pushed == true || (CWidgetManager::getInstance()->getCapturePointerLeft() == this))) + return; + + + + if (_Over) + { + + if ((lastOver == false) && (_AHOnOver != NULL)) + CAHManager::getInstance()->runActionHandler (_AHOnOver, this, _AHOverParams); + + // the pointer is over the button + color= getCurrentColorOver(globalColor); + color.A = (uint8)(((sint32)color.A*((sint32)globalColor.A+1))>>8); + + // Frozen ? + if (getFrozen()) + color.A >>= 2; + + // draw the over. force upper layer to avoid problem with DXTC/tga + rVR.drawRotFlipBitmap ( _RenderLayer+1, x, y, txw, txh, + 0, false, + _TextureIdOver, + color ); + } + } + + + // ---------------------------------------------------------------------------- + void CCtrlButton::updateCoords() + { + if (!_Scale) + { + CViewRenderer &rVR = *CViewRenderer::getInstance(); + sint32 txw, txh; + rVR.getTextureSizeFromId (_TextureIdNormal, txw, txh); + _W = txw; + _H = txh; + } + CViewBase::updateCoords(); + } + + // ---------------------------------------------------------------------------- + void CCtrlButton::setTexture(const std::string&name) + { + // CInterfaceManager *pIM = CInterfaceManager::getInstance(); + // CViewRenderer &rVR = *CViewRenderer::getInstance(); + _TextureIdNormal.setTexture(name.c_str()); + } + + // ---------------------------------------------------------------------------- + void CCtrlButton::setTexturePushed(const std::string&name) + { + // CInterfaceManager *pIM = CInterfaceManager::getInstance(); + // CViewRenderer &rVR = *CViewRenderer::getInstance(); + _TextureIdPushed.setTexture(name.c_str()); + } + + // ---------------------------------------------------------------------------- + void CCtrlButton::setTextureOver(const std::string&name) + { + // CInterfaceManager *pIM = CInterfaceManager::getInstance(); + // CViewRenderer &rVR = *CViewRenderer::getInstance(); + _TextureIdOver.setTexture(name.c_str()); + } + + // ---------------------------------------------------------------------------- + std::string CCtrlButton::getTexture() const + { + CViewRenderer &rVR = *CViewRenderer::getInstance(); + return rVR.getTextureNameFromId(_TextureIdNormal); + } + + // ---------------------------------------------------------------------------- + std::string CCtrlButton::getTexturePushed() const + { + CViewRenderer &rVR = *CViewRenderer::getInstance(); + return rVR.getTextureNameFromId(_TextureIdPushed); + } + + // ---------------------------------------------------------------------------- + std::string CCtrlButton::getTextureOver() const + { + CViewRenderer &rVR = *CViewRenderer::getInstance(); + return rVR.getTextureNameFromId(_TextureIdOver); + } + + // *************************************************************************** + sint32 CCtrlButton::getMaxUsedW() const + { + sint32 txw, txh; + CViewRenderer &rVR = *CViewRenderer::getInstance(); + rVR.getTextureSizeFromId (_TextureIdNormal, txw, txh); + return txw; + } + + // *************************************************************************** + sint32 CCtrlButton::getMinUsedW() const + { + return getMaxUsedW(); + } + + // *************************************************************************** + void CCtrlButton::fitTexture() + { + CViewRenderer &rVR = *CViewRenderer::getInstance(); + sint32 w, h; + rVR.getTextureSizeFromId(_TextureIdNormal, w, h); + setW(w); + setH(h); + } + + // *************************************************************************** + bool CCtrlButton::getMouseOverShape(string &texName, uint8 &rot, CRGBA &col) + { + if (_AHOnLeftClickString == "browse") + { + if (!_AHOnLeftClickStringParams.empty()) { - nTxId = _TextureIdPushed; - color = getCurrentColorPushed(globalColor); + texName = "@curs_pick.tga@"+_AHOnLeftClickStringParams; } else { - nTxId = _TextureIdNormal; - color = getCurrentColorNormal(globalColor); - _Pushed = false; + texName = "curs_pick.tga"; } + rot= 0; + col = CRGBA::White; + return true; } - break; - default: - break; + + return false; } - color.A = (uint8)(((sint32)color.A*((sint32)globalColor.A+1))>>8); - - // Fromzen ? - if (getFrozen() && getFrozenHalfTone()) - color.A >>= 2; - - if (!_Scale) - { - CViewRenderer::getInstance()->getTextureSizeFromId (nTxId, txw, txh); - if (_Align&1) - x = x + _WReal - txw; - if (_Align&2) - y = y + _HReal - txh; - } - rVR.drawRotFlipBitmap ( _RenderLayer, x, y, txw, txh, - 0, false, - nTxId, - color ); - - if ((_OverWhenPushed == false) && (_Pushed == true || (CWidgetManager::getInstance()->getCapturePointerLeft() == this))) - return; - - - - if (_Over) - { - - if ((lastOver == false) && (_AHOnOver != NULL)) - CAHManager::getInstance()->runActionHandler (_AHOnOver, this, _AHOverParams); - - // the pointer is over the button - color= getCurrentColorOver(globalColor); - color.A = (uint8)(((sint32)color.A*((sint32)globalColor.A+1))>>8); - - // Frozen ? - if (getFrozen()) - color.A >>= 2; - - // draw the over. force upper layer to avoid problem with DXTC/tga - rVR.drawRotFlipBitmap ( _RenderLayer+1, x, y, txw, txh, - 0, false, - _TextureIdOver, - color ); - } } - -// ---------------------------------------------------------------------------- -void CCtrlButton::updateCoords() -{ - if (!_Scale) - { - CViewRenderer &rVR = *CViewRenderer::getInstance(); - sint32 txw, txh; - rVR.getTextureSizeFromId (_TextureIdNormal, txw, txh); - _W = txw; - _H = txh; - } - CViewBase::updateCoords(); -} - -// ---------------------------------------------------------------------------- -void CCtrlButton::setTexture(const std::string&name) -{ -// CInterfaceManager *pIM = CInterfaceManager::getInstance(); -// CViewRenderer &rVR = *CViewRenderer::getInstance(); - _TextureIdNormal.setTexture(name.c_str()); -} - -// ---------------------------------------------------------------------------- -void CCtrlButton::setTexturePushed(const std::string&name) -{ -// CInterfaceManager *pIM = CInterfaceManager::getInstance(); -// CViewRenderer &rVR = *CViewRenderer::getInstance(); - _TextureIdPushed.setTexture(name.c_str()); -} - -// ---------------------------------------------------------------------------- -void CCtrlButton::setTextureOver(const std::string&name) -{ -// CInterfaceManager *pIM = CInterfaceManager::getInstance(); -// CViewRenderer &rVR = *CViewRenderer::getInstance(); - _TextureIdOver.setTexture(name.c_str()); -} - -// ---------------------------------------------------------------------------- -std::string CCtrlButton::getTexture() const -{ - CViewRenderer &rVR = *CViewRenderer::getInstance(); - return rVR.getTextureNameFromId(_TextureIdNormal); -} - -// ---------------------------------------------------------------------------- -std::string CCtrlButton::getTexturePushed() const -{ - CViewRenderer &rVR = *CViewRenderer::getInstance(); - return rVR.getTextureNameFromId(_TextureIdPushed); -} - -// ---------------------------------------------------------------------------- -std::string CCtrlButton::getTextureOver() const -{ - CViewRenderer &rVR = *CViewRenderer::getInstance(); - return rVR.getTextureNameFromId(_TextureIdOver); -} - -// *************************************************************************** -sint32 CCtrlButton::getMaxUsedW() const -{ - sint32 txw, txh; - CViewRenderer &rVR = *CViewRenderer::getInstance(); - rVR.getTextureSizeFromId (_TextureIdNormal, txw, txh); - return txw; -} - -// *************************************************************************** -sint32 CCtrlButton::getMinUsedW() const -{ - return getMaxUsedW(); -} - -// *************************************************************************** -void CCtrlButton::fitTexture() -{ - CViewRenderer &rVR = *CViewRenderer::getInstance(); - sint32 w, h; - rVR.getTextureSizeFromId(_TextureIdNormal, w, h); - setW(w); - setH(h); -} - -// *************************************************************************** -bool CCtrlButton::getMouseOverShape(string &texName, uint8 &rot, CRGBA &col) -{ - if (_AHOnLeftClickString == "browse") - { - if (!_AHOnLeftClickStringParams.empty()) - { - texName = "@curs_pick.tga@"+_AHOnLeftClickStringParams; - } - else - { - texName = "curs_pick.tga"; - } - rot= 0; - col = CRGBA::White; - return true; - } - - return false; -} diff --git a/code/ryzom/client/src/interface_v3/dbgroup_list_sheet_text.h b/code/ryzom/client/src/interface_v3/dbgroup_list_sheet_text.h index ef1a00f9d..f27dd02e7 100644 --- a/code/ryzom/client/src/interface_v3/dbgroup_list_sheet_text.h +++ b/code/ryzom/client/src/interface_v3/dbgroup_list_sheet_text.h @@ -27,9 +27,13 @@ #include "dbctrl_sheet.h" #include "view_text.h" +namespace NLGUI +{ + class CCtrlButton; +} + // *************************************************************************** -class CCtrlButton; class CCtrlScroll; class CHandlerListSheetTradeSelect; class CHandlerListSheetTradeRightClick; diff --git a/code/ryzom/client/src/interface_v3/dbgroup_list_sheet_trade.h b/code/ryzom/client/src/interface_v3/dbgroup_list_sheet_trade.h index 54b7dba75..23c96c0c3 100644 --- a/code/ryzom/client/src/interface_v3/dbgroup_list_sheet_trade.h +++ b/code/ryzom/client/src/interface_v3/dbgroup_list_sheet_trade.h @@ -23,9 +23,13 @@ #include "dbgroup_list_sheet_text.h" #include "game_share/bot_chat_types.h" +namespace NLGUI +{ + class CCtrlButton; +} + // *************************************************************************** -class CCtrlButton; class CCtrlScroll; class CHandlerListSheetTradeSelect; class CHandlerListSheetTradeRightClick; diff --git a/code/ryzom/client/src/interface_v3/group_container.h b/code/ryzom/client/src/interface_v3/group_container.h index 330342ed1..bd23a8b38 100644 --- a/code/ryzom/client/src/interface_v3/group_container.h +++ b/code/ryzom/client/src/interface_v3/group_container.h @@ -26,10 +26,10 @@ namespace NLGUI { class CEventDescriptorLocalised; + class CCtrlButton; } class CInterfaceList; -class CCtrlButton; class CCtrlScroll; class CViewText; class COptionsContainerInsertion; diff --git a/code/ryzom/client/src/interface_v3/group_html.h b/code/ryzom/client/src/interface_v3/group_html.h index 7990baa61..333137651 100644 --- a/code/ryzom/client/src/interface_v3/group_html.h +++ b/code/ryzom/client/src/interface_v3/group_html.h @@ -37,9 +37,13 @@ extern "C" #include "WWWInit.h" } +namespace NLGUI +{ + class CCtrlButton; +} + class CGroupList; class CCtrlScroll; -class CCtrlButton; class CDBGroupComboBox; class CGroupParagraph;