## SwingOSC – Java-based GUI classes

This class is meant as an emulation of SCDragSource / SCDragSink / SCDragBoth. last mod: 17-jul-09 sciss
Also refer to JSCView for different behaviour affecting all widgets

different behaviour
string compilation | the compilation of a string dragged from an external application happens at the end of the dnd gesture ; in cocoa gui, the string is compiled as soon as the mouse is moved over a gui component.
extended functionality
string compilation | string compilation can be switched off by calling interpretDroppedStrings_( false ).

# JSCDragSink, JSCDragSink, JSCDragBoth

Note: please use the abstraction layer DragSource / DragSink / DragBoth if possible!

Drag+Drop Gadgets ; `JSCDragSource` can be a source of a drag gesture, `JSCDragSink` can be a target of a drag gesture. `JSCDragBoth` combines both a source and a target.

    (
        var w, f, r;

        w = JSCWindow.new;
        f = FlowLayout( w.view.bounds );
        r = Rect( 0, 0, 150, 30 );
        w.view.decorator = f;
        JSCStaticText( w, r ).string_( "JSCDragSource" );
        x = JSCDragSource( w, r );
        f.nextLine;
        JSCStaticText( w, r ).string_( "JSCDragSink" );
        y = JSCDragSink( w, r );
        f.nextLine;
        JSCStaticText( w, r ).string_( "JSCDragBoth" );
        z = JSCDragBoth( w, r );
        w.front;
        f.nextLine;
        JSCStaticText( w, r ).string_( "Ctrl+Press+Move" );
        JSCSlider( w, r );
    )

    // detect drops
    y.action = { arg butt;
        ("Woooha! We got "++butt.object).postln;
    }

    // set the object that can be dragged
    x.object = "Schnucki 3000";
    z.object = "Haschimoto";

### External applications

- dragging from SwingOSC to an external application will export the transferable object as a string (`currentDrag.asString`).
- dragging a string from an external application to SwingOSC will compile that string and save the result in `currentDrag`.
- dragging a file or folder from the Finder / desktop manager to SwingOSC will store a PathName in `currentDrag`.
- dragging several files or folders from the Finder / desktop manager to SwingOSC will store an Array of PathNames in `currentDrag`.

Example: boot the local server, select the following code snipped and drag it onto the drag sink in the window created above:

    (
        { Pan2.ar( SinOsc.ar( 220.5, mul: 0.5 ))}.play;
    )

Example: drag the following snipped onto the slider:

    (
        sqrt( 0.5 );
    )

This automatic compilation can be switched off, by calling `interpretDroppedStrings_( false )` (works with SwingOSC only!):

    y.interpretDroppedStrings = false;
    // now try again to drop a string onto the drag sink!