Drag and Drop function


#1

Hello everybody !

Here is my problem : I want to add a Drag and Drop feature in my program to allow the drag and drop of MIDI files into Tracktion… I know it’s possible to do this because I have tried to drag and drop a MID between Tracktion and the Windows’ Explorer window…

How can I do this with Juce ? The function I must use is this one but I don’t know how to configure it…


#2

no, that’s only for internal juce-based dragging, it can’t drag things outside into other apps.

Check out PlatformUtilities::canDropFilesAtMousePosition() and dropFilesAtMousePosition(). You can use these in your mouseDrag() and mouseUp() methods, and set the cursor appropriately.


#3

OK, I will check it, thanks for the answers :wink:

(Tracktion 2 Ruuuuuuuules) 8)


#4

its not out yet is it???

or are you a beta tester :twisted: :stuck_out_tongue:


#5

No, a friend was at the NAMM in France and have seen it :lol:


#6

Oops Jules, I think I have found a bug in Juce… First Check what I have written :

[code]void mouseDrag (const MouseEvent& e)
{
dragCours = true;
}

void mouseUp (const MouseEvent& e)
{
StringArray sa;

  if (dragCours)
  {
        sa.add(fileHard->getFullPathName());
                        
        if (PlatformUtilities::canDropFilesAtMousePosition())
              PlatformUtilities::dropFilesAtMousePosition(sa);
  }
  dragCours = false;

}[/code]

As you have understood, that doesn’t work, and if I try for example to drag in the Dev C++ Explorer, it shows me one window for each character in the path, for “C:\Win.mid” it says me :

“Can’t find C”
“Can’t find :”
"Can’t find "
“Can’t find W” etc. etc. etc.

But if i drag and drop from the Windows’ Explorer windows, that works. So maybe a bug in Juce ?


#7

hmm - must be because it’s passing windows a unicode filename… I’ll investigate.


#8

yeah - looks like I messed up. The line in PlatformUtils.cpp that says

pDropFiles->fWide = SystemStats::getOSType() == SystemStats::Win95 || SystemStats::getOSType() == SystemStats::Win98;

should just be:

pDropFiles->fWide = true;

God knows what I was thinking when I wrote that…


#9

Thanks, I will try :wink:


#10

I have modified the line, recompiled the Juce library and the problem is still alive… I precise I’m working with Win98 :cry:


#11

Another question that’s slightly off topic:
Is there any way to have drag and drop between two running instances of the same app?


#12

oh, maybe win98 doesn’t handle the wide char stuff properly. Try setting the value to false and see if that works - I’ll have a proper look at it for the next release…


#13

Thanks :wink:


#14

[quote=“jtxx000”]Another question that’s slightly off topic:
Is there any way to have drag and drop between two running instances of the same app?[/quote]

i guess that’s a no… :stuck_out_tongue:


#15

well you can use the normal drag + drop, like you would between juce and non-juce apps, but not the clever internal drag-and-drop stuff because they don’t live in the same memory-space.


#16

i tried using dropFilesAtMousePosition() but it doesn’t seem to be working for some reason. When i try to drag between two instances of my app canDropoFilesAtMousePosition() returns true but dropFilesAtMousePosition() doesn’t call the filesDropped() method on the other app. if you try to drop a file from my app to windows explorer canDropoFilesAtMousePosition() returns false.

what am i doing wrong?


#17