AEDragAndDrop.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /*
  2. #include <Atomic/IO/Log.h>
  3. #include <Atomic/Graphics/Graphics.h>
  4. #include <Atomic/Input/InputEvents.h>
  5. #include <Atomic/Input/Input.h>
  6. #include <Atomic/UI/UIWidget.h>
  7. #include <ToolCore/Assets/Asset.h>
  8. #include <ThirdParty/TurboBadger/tb_widgets.h>
  9. #include "AEDragAndDrop.h"
  10. #ifdef ATOMIC_PLATFORM_OSX
  11. #include "AEMacDragAndDrop.h"
  12. #endif
  13. namespace AtomicEditor
  14. {
  15. AEDragAndDrop::AEDragAndDrop(Context *context) : Object(context)
  16. {
  17. #ifdef ATOMIC_PLATFORM_OSX
  18. InitDragAndDrop(this);
  19. #endif
  20. SubscribeToEvent(E_MOUSEMOVE, HANDLER(AEDragAndDrop,HandleMouseMove));
  21. SubscribeToEvent(E_MOUSEBUTTONUP, HANDLER(AEDragAndDrop,HandleMouseUp));
  22. SubscribeToEvent(E_MOUSEBUTTONDOWN, HANDLER(AEDragAndDrop,HandleMouseDown));
  23. }
  24. void AEDragAndDrop::HandleMouseDown(StringHash eventType, VariantMap& eventData)
  25. {
  26. using namespace MouseMove;
  27. Input* input = GetSubsystem<Input>();
  28. if (!input->IsMouseVisible())
  29. return;
  30. if (eventData[P_BUTTONS].GetUInt() & MOUSEB_LEFT)
  31. {
  32. // see if we have a widget
  33. if (tb::TBWidget::hovered_widget && tb::TBWidget::hovered_widget->GetDelegate())
  34. {
  35. UIWidget* widget = (UIWidget*) tb::TBWidget::hovered_widget->GetDelegate();
  36. dragObject_ = widget->GetDragObject();
  37. if (dragObject_ && dragObject_->GetType() == ToolCore::Asset::GetTypeStatic())
  38. {
  39. ToolCore::Asset* asset = (ToolCore::Asset*) dragObject_.Get();
  40. LOGINFOF("Drag Asset: %s", asset->GetPath().CString());
  41. #ifdef ATOMIC_PLATFORM_OSX
  42. StartDragAndDrop();
  43. #endif
  44. }
  45. }
  46. }
  47. }
  48. void AEDragAndDrop::HandleMouseUp(StringHash eventType, VariantMap& eventData)
  49. {
  50. using namespace MouseMove;
  51. Input* input = GetSubsystem<Input>();
  52. if (!input->IsMouseVisible())
  53. return;
  54. if (eventData[P_BUTTONS].GetUInt() & MOUSEB_LEFT)
  55. {
  56. dragObject_ = 0;
  57. }
  58. }
  59. void AEDragAndDrop::HandleMouseMove(StringHash eventType, VariantMap& eventData)
  60. {
  61. using namespace MouseMove;
  62. Input* input = GetSubsystem<Input>();
  63. if (!input->IsMouseVisible())
  64. return;
  65. if (eventData[P_BUTTONS].GetUInt() & MOUSEB_LEFT)
  66. {
  67. int x = eventData[P_X].GetInt();
  68. int y = eventData[P_Y].GetInt();
  69. }
  70. }
  71. void AEDragAndDrop::BeginDrag()
  72. {
  73. dragFilenames_.Clear();
  74. }
  75. void AEDragAndDrop::AddDragFilename(const String& filename)
  76. {
  77. dragFilenames_.Push(filename);
  78. }
  79. void AEDragAndDrop::ConcludeDrag()
  80. {
  81. for (unsigned i = 0; i < dragFilenames_.Size(); i++)
  82. {
  83. VariantMap eventData;
  84. eventData[DragAndDrop::P_FILENAME] = dragFilenames_[i];
  85. SendEvent(E_DRAGANDDROP, eventData);
  86. }
  87. dragFilenames_.Clear();
  88. }
  89. }
  90. */