[e-cvs] cvs commit: e/src/esrc/com/skyhunter/e/awt/dnd setupDropFuncAuthor.emaker testSetupDropFunc.e

markm@eros.cs.jhu.edu markm@eros.cs.jhu.edu
Fri, 14 Sep 2001 18:52:50 -0400


markm       01/09/14 18:52:50

  Added:       src/esrc/com/skyhunter/e/awt/dnd setupDropFuncAuthor.emaker
                        testSetupDropFunc.e
  Log:
  new files

Revision  Changes    Path
1.1                  e/src/esrc/com/skyhunter/e/awt/dnd/setupDropFuncAuthor.emaker

Index: setupDropFuncAuthor.emaker
===================================================================

//Copyright (C) 2000 Marc Stiegler. All Rights Reserved.

def setupDropFuncAuthor(javaAwtDndDropTarget, traceln) :near {
    
    // FlavorReactorMap, key is a flavor, value is a one-parameter function
    // the parameter is the object that was dropped
    def setupDrop(component, flavorReactorMap) {
        def dropTargetListener {
            to drop (dropTargetDropEvent) {
                traceln("drop event started")
                dropTargetDropEvent acceptDrop(
                    dropTargetDropEvent getDropAction())
                var completedDrop := false
                try {
                    def findFlavor() :near {
                        var flavor := null
                        for each => value in flavorReactorMap {
                            if (dropTargetDropEvent isDataFlavorSupported(each)) {
                                flavor := each
                                traceln("found flavor match: " + each)
                                break()
                            }
                        }
                        flavor
                    }
                    def flavor := findFlavor()
                    if (flavor != null) {
                        def obj := dropTargetDropEvent getTransferable() getTransferData(flavor)
                        traceln("got object: " + obj)
                        flavorReactorMap[flavor] run(obj)
                        completedDrop := true
                    }
                } catch err {traceln ("getTransfer err: " + err)}
                dropTargetDropEvent dropComplete(completedDrop)
            }
            to dragEnter(dropTargetDragEvent) {
                traceln("dragEnter started")
                #dropTargetDragEvent acceptDrag()
            }
            match [verb,args] {
                #if (verb != "dragOver") {traceln("got drop behavior: " + verb)}
            }
        }
        component setDropTarget(
            javaAwtDndDropTarget new(component, dropTargetListener))
    }
}



1.1                  e/src/esrc/com/skyhunter/e/awt/dnd/testSetupDropFunc.e

Index: testSetupDropFunc.e
===================================================================

//Copyright (C) 2000 Marc Stiegler. All Rights Reserved.

def setupDropFuncAuthor := <import:com.skyhunter.e.awt.dnd.setupDropFuncAuthor>

def frame := <swing:JFrame> new()
def right := <swing:JLabel> new()
right setText("right")
frame getContentPane() add(right, "East")

def reactToFiles(files) {
    println("dropped object: " + files)
    println("array size: " + files size())
    for i in 0..(files size() - 1) {
        println("text: " + files[i] getText())
    }
}
def dataFlavor := <awt:datatransfer.DataFlavor>
def setupFileDrop := setupDropFuncAuthor(<awt:dnd.DropTarget>, println)
setupFileDrop(right, [dataFlavor javaFileListFlavor() => reactToFiles])

frame pack()
frame show()
println("compiled")
interp blockAtTop()