CHANGED: #1471 CCtrlButton is now under the NLGUI namespace.

--HG--
branch : gui-refactoring
hg/feature/sse2
dfighter1985 13 years ago
parent aca24ff510
commit a90445fa03

@ -25,77 +25,77 @@
namespace NLGUI namespace NLGUI
{ {
class CEventDescriptor; class CEventDescriptor;
}
/**
* <Class description>
* \author Nicolas Brigand
* \author Nevrax France
* \date 2002
*/
class CCtrlButton : public CCtrlBaseButton
{
public:
/// Constructor /**
CCtrlButton(const TCtorParam &param) : CCtrlBaseButton(param) * <Class description>
* \author Nicolas Brigand
* \author Nevrax France
* \date 2002
*/
class CCtrlButton : public CCtrlBaseButton
{ {
_Scale = false; public:
_Align = 0;
}
// Init part /// Constructor
virtual bool parse (xmlNodePtr cur,CInterfaceGroup * parentGroup); CCtrlButton(const TCtorParam &param) : 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 bool getMouseOverShape(std::string &/* texName */, uint8 &/* rot */, NLMISC::CRGBA &/* col */);
virtual void draw();
void setTexture (const std::string&name); // Display part
void setTexturePushed (const std::string&name); virtual void draw();
void setTextureOver (const std::string&name);
void fitTexture(); void setTexture (const std::string&name);
void setTexturePushed (const std::string&name);
void setTextureOver (const std::string&name);
std::string getTexture () const; void fitTexture();
std::string getTexturePushed () const;
std::string getTextureOver() const;
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 isTextureValid() const { return _TextureIdNormal != -1; }
bool getScale() const { return _Scale; }
void setScale(bool scale) { _Scale = scale; }
// 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;
REFLECT_EXPORT_START(CCtrlButton, CCtrlBaseButton) /// \from CInterfaceElement
REFLECT_STRING("texture", getTexture, setTexture); sint32 getMaxUsedW() const;
REFLECT_STRING("texture_pushed", getTexturePushed, setTexturePushed); sint32 getMinUsedW() const;
REFLECT_STRING("texture_over", getTextureOver, setTextureOver);
REFLECT_BOOL("scale", getScale, setScale);
REFLECT_EXPORT_END
protected: 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
CViewRenderer::CTextureId _TextureIdNormal; protected:
CViewRenderer::CTextureId _TextureIdPushed;
CViewRenderer::CTextureId _TextureIdOver;
private: CViewRenderer::CTextureId _TextureIdNormal;
CViewRenderer::CTextureId _TextureIdPushed;
CViewRenderer::CTextureId _TextureIdOver;
bool _Scale; private:
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 #endif // RZ_CTRL_BUTTON_H

@ -14,9 +14,6 @@
// You should have received a copy of the GNU Affero General Public License // You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "nel/gui/ctrl_button.h" #include "nel/gui/ctrl_button.h"
#include "nel/misc/xml_auto_ptr.h" #include "nel/misc/xml_auto_ptr.h"
#include "nel/gui/widget_manager.h" #include "nel/gui/widget_manager.h"
@ -29,139 +26,158 @@ using namespace NL3D;
NLMISC_REGISTER_OBJECT(CViewBase, CCtrlButton, std::string, "button"); NLMISC_REGISTER_OBJECT(CViewBase, CCtrlButton, std::string, "button");
// ---------------------------------------------------------------------------- namespace NLGUI
bool CCtrlButton::parse(xmlNodePtr cur, CInterfaceGroup * parentGroup)
{ {
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. bool CCtrlButton::parse(xmlNodePtr cur, CInterfaceGroup * parentGroup)
//if it is undefined, set it to zero
if (! CCtrlBaseButton::parse(cur,parentGroup) )
{ {
string tmp = "cannot parse view:"+getId()+", parent:"+parentGroup->getId(); CXMLAutoPtr prop;
nlinfo(tmp.c_str()); //try to get props that can be inherited from groups
return false; //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) )
{
string tmp = "cannot parse view:"+getId()+", parent:"+parentGroup->getId();
nlinfo(tmp.c_str());
return false;
}
// *** Read Textures // *** Read Textures
prop = (char*) xmlGetProp( cur, (xmlChar*)"tx_normal" ); prop = (char*) xmlGetProp( cur, (xmlChar*)"tx_normal" );
if (prop) if (prop)
{ {
string TxName = (const char *) prop; string TxName = (const char *) prop;
TxName = strlwr(TxName); TxName = strlwr(TxName);
_TextureIdNormal.setTexture(TxName.c_str()); _TextureIdNormal.setTexture(TxName.c_str());
} }
prop = (char*) xmlGetProp( cur, (xmlChar*)"tx_pushed" ); prop = (char*) xmlGetProp( cur, (xmlChar*)"tx_pushed" );
if (prop) if (prop)
{ {
string TxName = (const char *) prop; string TxName = (const char *) prop;
TxName = strlwr(TxName); TxName = strlwr(TxName);
_TextureIdPushed.setTexture(TxName.c_str()); _TextureIdPushed.setTexture(TxName.c_str());
} }
prop = (char*) xmlGetProp( cur, (xmlChar*)"tx_over" ); prop = (char*) xmlGetProp( cur, (xmlChar*)"tx_over" );
if (prop) if (prop)
{ {
string TxName = (const char *) prop; string TxName = (const char *) prop;
TxName = strlwr(TxName); TxName = strlwr(TxName);
_TextureIdOver.setTexture(TxName.c_str()); _TextureIdOver.setTexture(TxName.c_str());
} }
// *** Misc. // *** Misc.
prop = (char*) xmlGetProp( cur, (xmlChar*)"scale" ); prop = (char*) xmlGetProp( cur, (xmlChar*)"scale" );
_Scale = false; _Scale = false;
if (prop) if (prop)
_Scale = convertBool(prop); _Scale = convertBool(prop);
prop = (char*) xmlGetProp (cur, (xmlChar*)"align"); prop = (char*) xmlGetProp (cur, (xmlChar*)"align");
_Align = 0; _Align = 0;
if (prop) if (prop)
{
const char *seekPtr = prop.getDatas();
while (*seekPtr != 0)
{ {
if ((*seekPtr=='l')||(*seekPtr=='L')) const char *seekPtr = prop.getDatas();
_Align &= ~1; while (*seekPtr != 0)
if ((*seekPtr=='r')||(*seekPtr=='R')) {
_Align |= 1; if ((*seekPtr=='l')||(*seekPtr=='L'))
if ((*seekPtr=='b')||(*seekPtr=='B')) _Align &= ~1;
_Align &= ~2; if ((*seekPtr=='r')||(*seekPtr=='R'))
if ((*seekPtr=='t')||(*seekPtr=='T')) _Align |= 1;
_Align |= 2; if ((*seekPtr=='b')||(*seekPtr=='B'))
++seekPtr; _Align &= ~2;
if ((*seekPtr=='t')||(*seekPtr=='T'))
_Align |= 2;
++seekPtr;
}
} }
}
return true; return true;
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void CCtrlButton::draw () void CCtrlButton::draw ()
{ {
sint32 nTxId = -1; sint32 nTxId = -1;
CRGBA color; CRGBA color;
CViewRenderer &rVR = *CViewRenderer::getInstance(); CViewRenderer &rVR = *CViewRenderer::getInstance();
CRGBA globalColor= CWidgetManager::getInstance()->getGlobalColorForContent(); CRGBA globalColor= CWidgetManager::getInstance()->getGlobalColorForContent();
// *** Detect Over // *** Detect Over
bool lastOver = false; bool lastOver = false;
updateOver(lastOver); updateOver(lastOver);
sint32 x = _XReal; sint32 x = _XReal;
sint32 y = _YReal; sint32 y = _YReal;
sint32 txw, txh; sint32 txw, txh;
// the pointer is over the button // the pointer is over the button
if (_Scale) if (_Scale)
{ {
x = _XReal; x = _XReal;
y = _YReal; y = _YReal;
txw = _WReal; txw = _WReal;
txh = _HReal; txh = _HReal;
} }
else else
{ {
x = _XReal; x = _XReal;
y = _YReal; y = _YReal;
} }
switch(_Type) switch(_Type)
{
case ToggleButton:
{ {
if (_Pushed) case ToggleButton:
{ {
nTxId = _TextureIdPushed; if (_Pushed)
color = getCurrentColorPushed(globalColor); {
nTxId = _TextureIdPushed;
color = getCurrentColorPushed(globalColor);
}
else
{
nTxId = _TextureIdNormal;
color = getCurrentColorNormal(globalColor);
}
} }
else break;
case RadioButton:
{ {
nTxId = _TextureIdNormal; // CViewPointer &rIP = *CInterfaceManager::getInstance()->getPointer();
color = getCurrentColorNormal(globalColor); // Init the radio button
} initRBRef();
}
break;
case RadioButton:
{
// CViewPointer &rIP = *CInterfaceManager::getInstance()->getPointer();
// Init the radio button
initRBRef();
if (*_RBRef == this) if (*_RBRef == this)
{ {
// if it is equal to the ref value, then the button must appear pushed // if it is equal to the ref value, then the button must appear pushed
nTxId = _TextureIdPushed; nTxId = _TextureIdPushed;
color = getCurrentColorPushed(globalColor); color = getCurrentColorPushed(globalColor);
}
else
{
if ((_Over) && (CWidgetManager::getInstance()->getCapturePointerLeft() == this))
{
nTxId = _TextureIdPushed;
color = getCurrentColorPushed(globalColor);
}
else
{
nTxId = _TextureIdNormal;
color = getCurrentColorNormal(globalColor);
_Pushed = false;
}
}
} }
else break;
case PushButton:
{ {
if ((_Over) && (CWidgetManager::getInstance()->getCapturePointerLeft() == this)) if (_Over && (CWidgetManager::getInstance()->getCapturePointerLeft() == this))
{ {
nTxId = _TextureIdPushed; nTxId = _TextureIdPushed;
color = getCurrentColorPushed(globalColor); color = getCurrentColorPushed(globalColor);
@ -173,175 +189,162 @@ void CCtrlButton::draw ()
_Pushed = false; _Pushed = false;
} }
} }
break;
default:
break;
} }
break;
case PushButton:
{
if (_Over && (CWidgetManager::getInstance()->getCapturePointerLeft() == this))
{
nTxId = _TextureIdPushed;
color = getCurrentColorPushed(globalColor);
}
else
{
nTxId = _TextureIdNormal;
color = getCurrentColorNormal(globalColor);
_Pushed = false;
}
}
break;
default:
break;
}
color.A = (uint8)(((sint32)color.A*((sint32)globalColor.A+1))>>8); color.A = (uint8)(((sint32)color.A*((sint32)globalColor.A+1))>>8);
// Fromzen ? // Fromzen ?
if (getFrozen() && getFrozenHalfTone()) if (getFrozen() && getFrozenHalfTone())
color.A >>= 2; color.A >>= 2;
if (!_Scale) if (!_Scale)
{ {
CViewRenderer::getInstance()->getTextureSizeFromId (nTxId, txw, txh); CViewRenderer::getInstance()->getTextureSizeFromId (nTxId, txw, txh);
if (_Align&1) if (_Align&1)
x = x + _WReal - txw; x = x + _WReal - txw;
if (_Align&2) if (_Align&2)
y = y + _HReal - txh; y = y + _HReal - txh;
} }
rVR.drawRotFlipBitmap ( _RenderLayer, x, y, txw, txh, rVR.drawRotFlipBitmap ( _RenderLayer, x, y, txw, txh,
0, false, 0, false,
nTxId, nTxId,
color ); color );
if ((_OverWhenPushed == false) && (_Pushed == true || (CWidgetManager::getInstance()->getCapturePointerLeft() == this))) if ((_OverWhenPushed == false) && (_Pushed == true || (CWidgetManager::getInstance()->getCapturePointerLeft() == this)))
return; return;
if (_Over) if (_Over)
{ {
if ((lastOver == false) && (_AHOnOver != NULL)) if ((lastOver == false) && (_AHOnOver != NULL))
CAHManager::getInstance()->runActionHandler (_AHOnOver, this, _AHOverParams); CAHManager::getInstance()->runActionHandler (_AHOnOver, this, _AHOverParams);
// the pointer is over the button // the pointer is over the button
color= getCurrentColorOver(globalColor); color= getCurrentColorOver(globalColor);
color.A = (uint8)(((sint32)color.A*((sint32)globalColor.A+1))>>8); color.A = (uint8)(((sint32)color.A*((sint32)globalColor.A+1))>>8);
// Frozen ? // Frozen ?
if (getFrozen()) if (getFrozen())
color.A >>= 2; color.A >>= 2;
// draw the over. force upper layer to avoid problem with DXTC/tga // draw the over. force upper layer to avoid problem with DXTC/tga
rVR.drawRotFlipBitmap ( _RenderLayer+1, x, y, txw, txh, rVR.drawRotFlipBitmap ( _RenderLayer+1, x, y, txw, txh,
0, false, 0, false,
_TextureIdOver, _TextureIdOver,
color ); color );
}
} }
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void CCtrlButton::updateCoords() void CCtrlButton::updateCoords()
{
if (!_Scale)
{ {
CViewRenderer &rVR = *CViewRenderer::getInstance(); if (!_Scale)
sint32 txw, txh; {
rVR.getTextureSizeFromId (_TextureIdNormal, txw, txh); CViewRenderer &rVR = *CViewRenderer::getInstance();
_W = txw; sint32 txw, txh;
_H = txh; rVR.getTextureSizeFromId (_TextureIdNormal, txw, txh);
_W = txw;
_H = txh;
}
CViewBase::updateCoords();
} }
CViewBase::updateCoords();
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void CCtrlButton::setTexture(const std::string&name) void CCtrlButton::setTexture(const std::string&name)
{ {
// CInterfaceManager *pIM = CInterfaceManager::getInstance(); // CInterfaceManager *pIM = CInterfaceManager::getInstance();
// CViewRenderer &rVR = *CViewRenderer::getInstance(); // CViewRenderer &rVR = *CViewRenderer::getInstance();
_TextureIdNormal.setTexture(name.c_str()); _TextureIdNormal.setTexture(name.c_str());
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void CCtrlButton::setTexturePushed(const std::string&name) void CCtrlButton::setTexturePushed(const std::string&name)
{ {
// CInterfaceManager *pIM = CInterfaceManager::getInstance(); // CInterfaceManager *pIM = CInterfaceManager::getInstance();
// CViewRenderer &rVR = *CViewRenderer::getInstance(); // CViewRenderer &rVR = *CViewRenderer::getInstance();
_TextureIdPushed.setTexture(name.c_str()); _TextureIdPushed.setTexture(name.c_str());
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void CCtrlButton::setTextureOver(const std::string&name) void CCtrlButton::setTextureOver(const std::string&name)
{ {
// CInterfaceManager *pIM = CInterfaceManager::getInstance(); // CInterfaceManager *pIM = CInterfaceManager::getInstance();
// CViewRenderer &rVR = *CViewRenderer::getInstance(); // CViewRenderer &rVR = *CViewRenderer::getInstance();
_TextureIdOver.setTexture(name.c_str()); _TextureIdOver.setTexture(name.c_str());
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
std::string CCtrlButton::getTexture() const std::string CCtrlButton::getTexture() const
{ {
CViewRenderer &rVR = *CViewRenderer::getInstance(); CViewRenderer &rVR = *CViewRenderer::getInstance();
return rVR.getTextureNameFromId(_TextureIdNormal); return rVR.getTextureNameFromId(_TextureIdNormal);
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
std::string CCtrlButton::getTexturePushed() const std::string CCtrlButton::getTexturePushed() const
{ {
CViewRenderer &rVR = *CViewRenderer::getInstance(); CViewRenderer &rVR = *CViewRenderer::getInstance();
return rVR.getTextureNameFromId(_TextureIdPushed); return rVR.getTextureNameFromId(_TextureIdPushed);
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
std::string CCtrlButton::getTextureOver() const std::string CCtrlButton::getTextureOver() const
{ {
CViewRenderer &rVR = *CViewRenderer::getInstance(); CViewRenderer &rVR = *CViewRenderer::getInstance();
return rVR.getTextureNameFromId(_TextureIdOver); return rVR.getTextureNameFromId(_TextureIdOver);
} }
// *************************************************************************** // ***************************************************************************
sint32 CCtrlButton::getMaxUsedW() const sint32 CCtrlButton::getMaxUsedW() const
{ {
sint32 txw, txh; sint32 txw, txh;
CViewRenderer &rVR = *CViewRenderer::getInstance(); CViewRenderer &rVR = *CViewRenderer::getInstance();
rVR.getTextureSizeFromId (_TextureIdNormal, txw, txh); rVR.getTextureSizeFromId (_TextureIdNormal, txw, txh);
return txw; return txw;
} }
// *************************************************************************** // ***************************************************************************
sint32 CCtrlButton::getMinUsedW() const sint32 CCtrlButton::getMinUsedW() const
{ {
return getMaxUsedW(); return getMaxUsedW();
} }
// *************************************************************************** // ***************************************************************************
void CCtrlButton::fitTexture() void CCtrlButton::fitTexture()
{ {
CViewRenderer &rVR = *CViewRenderer::getInstance(); CViewRenderer &rVR = *CViewRenderer::getInstance();
sint32 w, h; sint32 w, h;
rVR.getTextureSizeFromId(_TextureIdNormal, w, h); rVR.getTextureSizeFromId(_TextureIdNormal, w, h);
setW(w); setW(w);
setH(h); setH(h);
} }
// *************************************************************************** // ***************************************************************************
bool CCtrlButton::getMouseOverShape(string &texName, uint8 &rot, CRGBA &col) bool CCtrlButton::getMouseOverShape(string &texName, uint8 &rot, CRGBA &col)
{
if (_AHOnLeftClickString == "browse")
{ {
if (!_AHOnLeftClickStringParams.empty()) if (_AHOnLeftClickString == "browse")
{
texName = "@curs_pick.tga@"+_AHOnLeftClickStringParams;
}
else
{ {
texName = "curs_pick.tga"; if (!_AHOnLeftClickStringParams.empty())
{
texName = "@curs_pick.tga@"+_AHOnLeftClickStringParams;
}
else
{
texName = "curs_pick.tga";
}
rot= 0;
col = CRGBA::White;
return true;
} }
rot= 0;
col = CRGBA::White; return false;
return true;
} }
return false;
} }

@ -27,9 +27,13 @@
#include "dbctrl_sheet.h" #include "dbctrl_sheet.h"
#include "view_text.h" #include "view_text.h"
namespace NLGUI
{
class CCtrlButton;
}
// *************************************************************************** // ***************************************************************************
class CCtrlButton;
class CCtrlScroll; class CCtrlScroll;
class CHandlerListSheetTradeSelect; class CHandlerListSheetTradeSelect;
class CHandlerListSheetTradeRightClick; class CHandlerListSheetTradeRightClick;

@ -23,9 +23,13 @@
#include "dbgroup_list_sheet_text.h" #include "dbgroup_list_sheet_text.h"
#include "game_share/bot_chat_types.h" #include "game_share/bot_chat_types.h"
namespace NLGUI
{
class CCtrlButton;
}
// *************************************************************************** // ***************************************************************************
class CCtrlButton;
class CCtrlScroll; class CCtrlScroll;
class CHandlerListSheetTradeSelect; class CHandlerListSheetTradeSelect;
class CHandlerListSheetTradeRightClick; class CHandlerListSheetTradeRightClick;

@ -26,10 +26,10 @@
namespace NLGUI namespace NLGUI
{ {
class CEventDescriptorLocalised; class CEventDescriptorLocalised;
class CCtrlButton;
} }
class CInterfaceList; class CInterfaceList;
class CCtrlButton;
class CCtrlScroll; class CCtrlScroll;
class CViewText; class CViewText;
class COptionsContainerInsertion; class COptionsContainerInsertion;

@ -37,9 +37,13 @@ extern "C"
#include "WWWInit.h" #include "WWWInit.h"
} }
namespace NLGUI
{
class CCtrlButton;
}
class CGroupList; class CGroupList;
class CCtrlScroll; class CCtrlScroll;
class CCtrlButton;
class CDBGroupComboBox; class CDBGroupComboBox;
class CGroupParagraph; class CGroupParagraph;

Loading…
Cancel
Save