Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/source/gui/IGUIButtonBehavior.cpp
Show All 18 Lines | |||||
#include "IGUIButtonBehavior.h" | #include "IGUIButtonBehavior.h" | ||||
#include "gui/CGUI.h" | #include "gui/CGUI.h" | ||||
#include "gui/CGUISprite.h" | #include "gui/CGUISprite.h" | ||||
IGUIButtonBehavior::IGUIButtonBehavior(CGUI& pGUI) | IGUIButtonBehavior::IGUIButtonBehavior(CGUI& pGUI) | ||||
: IGUIObject(pGUI), | : IGUIObject(pGUI), | ||||
m_Pressed(false), | m_Pressed(), | ||||
m_PressedRight(false) | m_PressedRight(), | ||||
{ | m_SoundDisabled(), | ||||
AddSetting<CStrW>("sound_disabled"); | m_SoundEnter(), | ||||
AddSetting<CStrW>("sound_enter"); | m_SoundLeave(), | ||||
AddSetting<CStrW>("sound_leave"); | m_SoundPressed(), | ||||
AddSetting<CStrW>("sound_pressed"); | m_SoundReleased() | ||||
AddSetting<CStrW>("sound_released"); | { | ||||
RegisterSetting("sound_disabled", m_SoundDisabled); | |||||
RegisterSetting("sound_enter", m_SoundEnter); | |||||
RegisterSetting("sound_leave", m_SoundLeave); | |||||
RegisterSetting("sound_pressed", m_SoundPressed); | |||||
RegisterSetting("sound_released", m_SoundReleased); | |||||
} | } | ||||
IGUIButtonBehavior::~IGUIButtonBehavior() | IGUIButtonBehavior::~IGUIButtonBehavior() | ||||
{ | { | ||||
} | } | ||||
void IGUIButtonBehavior::HandleMessage(SGUIMessage& Message) | void IGUIButtonBehavior::HandleMessage(SGUIMessage& Message) | ||||
{ | { | ||||
const bool enabled = GetSetting<bool>("enabled"); | |||||
// TODO Gee: easier access functions | // TODO Gee: easier access functions | ||||
switch (Message.type) | switch (Message.type) | ||||
{ | { | ||||
case GUIM_MOUSE_ENTER: | case GUIM_MOUSE_ENTER: | ||||
if (enabled) | if (m_Enabled) | ||||
PlaySound("sound_enter"); | PlaySound(m_SoundEnter); | ||||
break; | break; | ||||
case GUIM_MOUSE_LEAVE: | case GUIM_MOUSE_LEAVE: | ||||
if (enabled) | if (m_Enabled) | ||||
PlaySound("sound_leave"); | PlaySound(m_SoundLeave); | ||||
break; | break; | ||||
case GUIM_MOUSE_DBLCLICK_LEFT: | case GUIM_MOUSE_DBLCLICK_LEFT: | ||||
if (!enabled) | if (!m_Enabled) | ||||
break; | break; | ||||
// Since GUIM_MOUSE_PRESS_LEFT also gets called twice in a | // Since GUIM_MOUSE_PRESS_LEFT also gets called twice in a | ||||
// doubleclick event, we let it handle playing sounds. | // doubleclick event, we let it handle playing sounds. | ||||
SendEvent(GUIM_DOUBLE_PRESSED, "doublepress"); | SendEvent(GUIM_DOUBLE_PRESSED, "doublepress"); | ||||
break; | break; | ||||
case GUIM_MOUSE_PRESS_LEFT: | case GUIM_MOUSE_PRESS_LEFT: | ||||
if (!enabled) | if (!m_Enabled) | ||||
{ | { | ||||
PlaySound("sound_disabled"); | PlaySound(m_SoundDisabled); | ||||
break; | break; | ||||
} | } | ||||
PlaySound("sound_pressed"); | PlaySound(m_SoundPressed); | ||||
SendEvent(GUIM_PRESSED, "press"); | SendEvent(GUIM_PRESSED, "press"); | ||||
m_Pressed = true; | m_Pressed = true; | ||||
break; | break; | ||||
case GUIM_MOUSE_DBLCLICK_RIGHT: | case GUIM_MOUSE_DBLCLICK_RIGHT: | ||||
if (!enabled) | if (!m_Enabled) | ||||
break; | break; | ||||
// Since GUIM_MOUSE_PRESS_RIGHT also gets called twice in a | // Since GUIM_MOUSE_PRESS_RIGHT also gets called twice in a | ||||
// doubleclick event, we let it handle playing sounds. | // doubleclick event, we let it handle playing sounds. | ||||
SendEvent(GUIM_DOUBLE_PRESSED_MOUSE_RIGHT, "doublepressright"); | SendEvent(GUIM_DOUBLE_PRESSED_MOUSE_RIGHT, "doublepressright"); | ||||
break; | break; | ||||
case GUIM_MOUSE_PRESS_RIGHT: | case GUIM_MOUSE_PRESS_RIGHT: | ||||
if (!enabled) | if (!m_Enabled) | ||||
{ | { | ||||
PlaySound("sound_disabled"); | PlaySound(m_SoundDisabled); | ||||
break; | break; | ||||
} | } | ||||
// Button was right-clicked | // Button was right-clicked | ||||
PlaySound("sound_pressed"); | PlaySound(m_SoundPressed); | ||||
SendEvent(GUIM_PRESSED_MOUSE_RIGHT, "pressright"); | SendEvent(GUIM_PRESSED_MOUSE_RIGHT, "pressright"); | ||||
m_PressedRight = true; | m_PressedRight = true; | ||||
break; | break; | ||||
case GUIM_MOUSE_RELEASE_RIGHT: | case GUIM_MOUSE_RELEASE_RIGHT: | ||||
if (!enabled) | if (!m_Enabled) | ||||
break; | break; | ||||
if (m_PressedRight) | if (m_PressedRight) | ||||
{ | { | ||||
m_PressedRight = false; | m_PressedRight = false; | ||||
PlaySound("sound_released"); | PlaySound(m_SoundReleased); | ||||
} | } | ||||
break; | break; | ||||
case GUIM_MOUSE_RELEASE_LEFT: | case GUIM_MOUSE_RELEASE_LEFT: | ||||
if (!enabled) | if (!m_Enabled) | ||||
break; | break; | ||||
if (m_Pressed) | if (m_Pressed) | ||||
{ | { | ||||
m_Pressed = false; | m_Pressed = false; | ||||
PlaySound("sound_released"); | PlaySound(m_SoundReleased); | ||||
} | } | ||||
break; | break; | ||||
default: | default: | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
void IGUIButtonBehavior::DrawButton(const CRect& rect, const float& z, CGUISpriteInstance& sprite, CGUISpriteInstance& sprite_over, CGUISpriteInstance& sprite_pressed, CGUISpriteInstance& sprite_disabled, int cell_id) | void IGUIButtonBehavior::DrawButton(const CRect& rect, const float& z, const CGUISpriteInstance& sprite, const CGUISpriteInstance& sprite_over, const CGUISpriteInstance& sprite_pressed, const CGUISpriteInstance& sprite_disabled, int cell_id) | ||||
{ | { | ||||
if (!GetSetting<bool>("enabled")) | if (!m_Enabled) | ||||
m_pGUI.DrawSprite(sprite_disabled || sprite, cell_id, z, rect); | m_pGUI.DrawSprite(sprite_disabled || sprite, cell_id, z, rect); | ||||
else if (m_MouseHovering) | else if (m_MouseHovering) | ||||
{ | { | ||||
if (m_Pressed) | if (m_Pressed) | ||||
m_pGUI.DrawSprite(sprite_pressed || sprite, cell_id, z, rect); | m_pGUI.DrawSprite(sprite_pressed || sprite, cell_id, z, rect); | ||||
else | else | ||||
m_pGUI.DrawSprite(sprite_over || sprite, cell_id, z, rect); | m_pGUI.DrawSprite(sprite_over || sprite, cell_id, z, rect); | ||||
} | } | ||||
else | else | ||||
m_pGUI.DrawSprite(sprite, cell_id, z, rect); | m_pGUI.DrawSprite(sprite, cell_id, z, rect); | ||||
} | } |
Wildfire Games · Phabricator