# # tkdnd_compat.tcl -- # # This file implements some utility procedures, to support older versions # of the TkDND package. # # This software is copyrighted by: # George Petasis, National Centre for Scientific Research "Demokritos", # Aghia Paraskevi, Athens, Greece. # e-mail: petasis@iit.demokritos.gr # # The following terms apply to all files associated # with the software unless explicitly disclaimed in individual files. # # The authors hereby grant permission to use, copy, modify, distribute, # and license this software and its documentation for any purpose, provided # that existing copyright notices are retained in all copies and that this # notice is included verbatim in any distributions. No written agreement, # license, or royalty fee is required for any of the authorized uses. # Modifications to this software may be copyrighted by their authors # and need not follow the licensing terms described here, provided that # the new terms are clearly indicated on the first page of each file where # they apply. # # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR # MODIFICATIONS. # namespace eval compat { };# namespace compat # ---------------------------------------------------------------------------- # Command ::dnd # ---------------------------------------------------------------------------- proc ::dnd {method window args} { switch $method { bindtarget { switch [llength $args] { 0 {return [tkdnd::compat::bindtarget0 $window]} 1 {return [tkdnd::compat::bindtarget1 $window [lindex $args 0]]} 2 {return [tkdnd::compat::bindtarget2 $window [lindex $args 0] \ [lindex $args 1]]} 3 {return [tkdnd::compat::bindtarget3 $window [lindex $args 0] \ [lindex $args 1] [lindex $args 2]]} 4 {return [tkdnd::compat::bindtarget4 $window [lindex $args 0] \ [lindex $args 1] [lindex $args 2] [lindex $args 3]]} } } cleartarget { return [tkdnd::compat::cleartarget $window] } bindsource { switch [llength $args] { 0 {return [tkdnd::compat::bindsource0 $window]} 1 {return [tkdnd::compat::bindsource1 $window [lindex $args 0]]} 2 {return [tkdnd::compat::bindsource2 $window [lindex $args 0] \ [lindex $args 1]]} 3 {return [tkdnd::compat::bindsource3 $window [lindex $args 0] \ [lindex $args 1] [lindex $args 2]]} } } clearsource { return [tkdnd::compat::clearsource $window] } drag { return [tkdnd::_init_drag 1 $window "press" 0 0 0 0] } } error "invalid number of arguments!" };# ::dnd # ---------------------------------------------------------------------------- # Command compat::bindtarget # ---------------------------------------------------------------------------- proc compat::bindtarget0 {window} { return [bind $window <>] };# compat::bindtarget0 proc compat::bindtarget1 {window type} { return [bindtarget2 $window $type ] };# compat::bindtarget1 proc compat::bindtarget2 {window type event} { switch $event { {return [bind $window <>]} {return [bind $window <>]} {return [bind $window <>]} {return [bind $window <>]} } };# compat::bindtarget2 proc compat::bindtarget3 {window type event script} { set type [normalise_type $type] ::tkdnd::drop_target register $window [list $type] switch $event { {return [bind $window <> $script]} {return [bind $window <> $script]} {return [bind $window <> $script]} {return [bind $window <> $script]} } };# compat::bindtarget3 proc compat::bindtarget4 {window type event script priority} { return [bindtarget3 $window $type $event $script] };# compat::bindtarget4 proc compat::normalise_type { type } { switch $type { text/plain - {text/plain;charset=UTF-8} - Text {return DND_Text} text/uri-list - Files {return DND_Files} default {return $type} } };# compat::normalise_type # ---------------------------------------------------------------------------- # Command compat::bindsource # ---------------------------------------------------------------------------- proc compat::bindsource0 {window} { return [bind $window <>] };# compat::bindsource0 proc compat::bindsource1 {window type} { return [bindsource2 $window $type ] };# compat::bindsource1 proc compat::bindsource2 {window type script} { set type [normalise_type $type] ::tkdnd::drag_source register $window $type bind $window <> "list {copy} {%t} \[$script\]" };# compat::bindsource2 proc compat::bindsource3 {window type script priority} { return [bindsource2 $window $type $script] };# compat::bindsource3 # ---------------------------------------------------------------------------- # Command compat::cleartarget # ---------------------------------------------------------------------------- proc compat::cleartarget {window} { };# compat::cleartarget # ---------------------------------------------------------------------------- # Command compat::clearsource # ---------------------------------------------------------------------------- proc compat::clearsource {window} { };# compat::clearsource