/* GWEN Copyright (c) 2010 Facepunch Studios See license in Gwen.h */ #pragma once #ifndef GWEN_CONTROLS_BUTTON_H #define GWEN_CONTROLS_BUTTON_H #include "Gwen/TextObject.h" #include "Gwen/Controls/Base.h" #include "Gwen/Controls/Label.h" namespace Gwen { namespace Controls { class ImagePanel; class GWEN_EXPORT Button : public Label { public: GWEN_CONTROL( Button, Label ); virtual void Render( Skin::Base* skin ); virtual void OnMouseClickLeft( int x, int y, bool bDown ); virtual void OnMouseDoubleClickLeft( int x, int y ); virtual bool OnKeySpace( bool bDown ); virtual void OnPress(); virtual void AcceleratePressed(); virtual bool IsDepressed() const { return m_bDepressed; } // // Buttons can be toggle type, which means that it is // toggled on and off. Its toggle status is in IsDepressed. // virtual void SetIsToggle( bool b ){ m_bToggle = b; } virtual bool IsToggle() const { return m_bToggle; } virtual bool GetToggleState() const { return m_bToggleStatus; } virtual void SetToggleState( bool b ); virtual void Toggle(){ SetToggleState( !GetToggleState() ); } virtual void SetImage( const TextObject& strName, bool bCenter = false ); // You can use this to trigger OnPress directly from other controls using GWEN_CALL_EX virtual void ReceiveEventPress( Base* /*pControl*/ ) { OnPress(); } virtual void SizeToContents(); virtual void Layout( Skin::Base* pSkin ); virtual bool OnKeyReturn(bool bDown) { onKeyboardReturn.Call(this); return true; } public: Gwen::Event::Caller onPress; Gwen::Event::Caller onDown; Gwen::Event::Caller onUp; Gwen::Event::Caller onDoubleClick; Gwen::Event::Caller onKeyboardReturn; Gwen::Event::Caller onToggle; Gwen::Event::Caller onToggleOn; Gwen::Event::Caller onToggleOff; protected: ImagePanel* m_Image; bool m_bDepressed; bool m_bToggle; bool m_bToggleStatus; bool m_bCenterImage; }; } } #endif