Browse Source

Working on drag and drop

Josh Engebretson 10 years ago
parent
commit
fcd770601e

+ 2 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/ProjectFrame.ts

@@ -193,6 +193,8 @@ class ProjectFrame extends ScriptWidget {
 
         var button = new Atomic.UIButton();
 
+        button.dragObject = asset;
+
         var lp = new Atomic.UILayoutParams;
         lp.height = 20;
 

+ 5 - 0
Source/Atomic/UI/UIWidget.h

@@ -71,6 +71,9 @@ public:
     void Invalidate();
     void Die();
 
+    void SetDragObject(Object* object) { dragObject_ = object; }
+    Object* GetDragObject() { return dragObject_; }
+
     UIWidget* GetFirstChild();
     UIWidget* GetNext();
 
@@ -97,6 +100,8 @@ protected:
 
     tb::TBWidget* widget_;
 
+    SharedPtr<Object> dragObject_;
+
 };
 
 }

+ 75 - 0
Source/AtomicEditorWork/Application/AEDragAndDrop.cpp

@@ -1,5 +1,13 @@
 
+#include <Atomic/IO/Log.h>
 #include <Atomic/Graphics/Graphics.h>
+#include <Atomic/Input/InputEvents.h>
+#include <Atomic/Input/Input.h>
+#include <Atomic/UI/UIWidget.h>
+
+#include <ToolCore/Assets/Asset.h>
+
+#include <ThirdParty/TurboBadger/tb_widgets.h>
 
 #include "AEDragAndDrop.h"
 
@@ -16,6 +24,73 @@ AEDragAndDrop::AEDragAndDrop(Context *context) : Object(context)
     InitDragAndDrop(this);
 #endif
 
+    SubscribeToEvent(E_MOUSEMOVE, HANDLER(AEDragAndDrop,HandleMouseMove));
+    SubscribeToEvent(E_MOUSEBUTTONUP, HANDLER(AEDragAndDrop,HandleMouseUp));
+    SubscribeToEvent(E_MOUSEBUTTONDOWN, HANDLER(AEDragAndDrop,HandleMouseDown));
+
+}
+
+void AEDragAndDrop::HandleMouseDown(StringHash eventType, VariantMap& eventData)
+{
+    using namespace MouseMove;
+
+    Input* input = GetSubsystem<Input>();
+
+    if (!input->IsMouseVisible())
+        return;
+
+    if (eventData[P_BUTTONS].GetUInt() & MOUSEB_LEFT)
+    {
+        // see if we have a widget
+        if (tb::TBWidget::hovered_widget && tb::TBWidget::hovered_widget->GetDelegate())
+        {
+            UIWidget* widget = (UIWidget*) tb::TBWidget::hovered_widget->GetDelegate();
+            dragObject_ = widget->GetDragObject();
+
+            if (dragObject_ && dragObject_->GetType() == ToolCore::Asset::GetTypeStatic())
+            {
+                ToolCore::Asset* asset = (ToolCore::Asset*) dragObject_.Get();
+                LOGINFOF("Drag Asset: %s", asset->GetPath().CString());
+
+                #ifdef ATOMIC_PLATFORM_OSX
+                // START DRAG
+                #endif
+
+            }
+        }
+    }
+}
+
+void AEDragAndDrop::HandleMouseUp(StringHash eventType, VariantMap& eventData)
+{
+    using namespace MouseMove;
+
+    Input* input = GetSubsystem<Input>();
+
+    if (!input->IsMouseVisible())
+        return;
+
+    if (eventData[P_BUTTONS].GetUInt() & MOUSEB_LEFT)
+    {
+        dragObject_ = 0;
+    }
+
+}
+
+void AEDragAndDrop::HandleMouseMove(StringHash eventType, VariantMap& eventData)
+{
+    using namespace MouseMove;
+
+    Input* input = GetSubsystem<Input>();
+
+    if (!input->IsMouseVisible())
+        return;
+
+    if (eventData[P_BUTTONS].GetUInt() & MOUSEB_LEFT)
+    {
+        int x = eventData[P_X].GetInt();
+        int y = eventData[P_Y].GetInt();
+    }
 }
 
 void AEDragAndDrop::BeginDrag()

+ 6 - 0
Source/AtomicEditorWork/Application/AEDragAndDrop.h

@@ -29,6 +29,12 @@ public:
 
 private:
 
+    void HandleMouseDown(StringHash eventType, VariantMap& eventData);
+    void HandleMouseUp(StringHash eventType, VariantMap& eventData);
+    void HandleMouseMove(StringHash eventType, VariantMap& eventData);
+
+    SharedPtr<Object> dragObject_;
+
     Vector<String> dragFilenames_;
 
 };

+ 2 - 1
Source/AtomicEditorWork/Application/AEMacDragAndDrop.mm

@@ -3,6 +3,8 @@
 
 #include <ThirdParty/SDL/include/SDL.h>
 #include <ThirdParty/SDL/include/SDL_syswm.h>
+
+#include <Atomic/IO/Log.h>
 #include <Atomic/Input/InputEvents.h>
 #include <Atomic/Graphics/Graphics.h>
 
@@ -17,7 +19,6 @@ static WeakPtr<AtomicEditor::AEDragAndDrop> dragAndDrop_;
     -(BOOL)prepareForDragOperation:(id)sender;
     -(BOOL)performDragOperation:(id <NSDraggingInfo>)sender;
     -(void)concludeDragOperation:(id <NSDraggingInfo>)sender;
-
 @end
 
 @implementation NSWindow (NSWindowWithDragAndDrop)