BsGUIDropButton.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "BsGUIDropButton.h"
  2. #include "BsImageSprite.h"
  3. #include "BsGUIWidget.h"
  4. #include "BsGUISkin.h"
  5. #include "BsSpriteTexture.h"
  6. #include "BsTextSprite.h"
  7. #include "BsGUILayoutOptions.h"
  8. #include "BsGUIMouseEvent.h"
  9. #include "BsGUIHelper.h"
  10. #include "CmTexture.h"
  11. #include "BsDragAndDropManager.h"
  12. using namespace CamelotFramework;
  13. using namespace BansheeEngine;
  14. namespace BansheeEditor
  15. {
  16. const String& GUIDropButton::getGUITypeName()
  17. {
  18. static String name = "DropButton";
  19. return name;
  20. }
  21. GUIDropButton::GUIDropButton(CM::UINT32 dragType, const GUIElementStyle* style, const GUILayoutOptions& layoutOptions)
  22. :GUIButtonBase(style, GUIContent(HString(L"None")), layoutOptions)
  23. {
  24. }
  25. GUIDropButton::~GUIDropButton()
  26. { }
  27. GUIDropButton* GUIDropButton::create(CM::UINT32 dragType, const GUIElementStyle* style)
  28. {
  29. return new (cm_alloc<GUIDropButton, PoolAlloc>()) GUIDropButton(dragType, style, GUILayoutOptions::create(style));
  30. }
  31. GUIDropButton* GUIDropButton::create(CM::UINT32 dragType, const GUIOptions& layoutOptions, const GUIElementStyle* style)
  32. {
  33. return new (cm_alloc<GUIDropButton, PoolAlloc>()) GUIDropButton(dragType, style, GUILayoutOptions::create(layoutOptions, style));
  34. }
  35. bool GUIDropButton::mouseEvent(const GUIMouseEvent& ev)
  36. {
  37. bool processed = GUIButtonBase::mouseEvent(ev);
  38. if(ev.getType() == GUIMouseEventType::MouseDragAndDropDragged)
  39. {
  40. if(DragAndDropManager::instance().isDragInProgress())
  41. {
  42. if(DragAndDropManager::instance().getDragTypeId() == mDragType)
  43. {
  44. if(!_isOn())
  45. _setOn(true);
  46. }
  47. else
  48. {
  49. if(_isOn())
  50. _setOn(false);
  51. }
  52. }
  53. else
  54. {
  55. if(_isOn())
  56. _setOn(false);
  57. }
  58. processed = true;
  59. }
  60. else if(ev.getType() == GUIMouseEventType::MouseDragAndDropDropped)
  61. {
  62. if(_isOn())
  63. _setOn(false);
  64. if(DragAndDropManager::instance().isDragInProgress() && DragAndDropManager::instance().getDragTypeId() == mDragType)
  65. {
  66. if(!onDataDropped.empty())
  67. onDataDropped(DragAndDropManager::instance().getDragData());
  68. }
  69. }
  70. return processed;
  71. }
  72. }