# | |
# 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 <<DropTargetTypes>>] | |
};# compat::bindtarget0 | |
proc compat::bindtarget1 {window type} { | |
return [bindtarget2 $window $type <Drop>] | |
};# compat::bindtarget1 | |
proc compat::bindtarget2 {window type event} { | |
switch $event { | |
<DragEnter> {return [bind $window <<DropEnter>>]} | |
<Drag> {return [bind $window <<DropPosition>>]} | |
<DragLeave> {return [bind $window <<DropLeave>>]} | |
<Drop> {return [bind $window <<Drop>>]} | |
} | |
};# compat::bindtarget2 | |
proc compat::bindtarget3 {window type event script} { | |
set type [normalise_type $type] | |
::tkdnd::drop_target register $window [list $type] | |
switch $event { | |
<DragEnter> {return [bind $window <<DropEnter>> $script]} | |
<Drag> {return [bind $window <<DropPosition>> $script]} | |
<DragLeave> {return [bind $window <<DropLeave>> $script]} | |
<Drop> {return [bind $window <<Drop>> $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 <<DropTargetTypes>>] | |
};# compat::bindsource0 | |
proc compat::bindsource1 {window type} { | |
return [bindsource2 $window $type <Drop>] | |
};# compat::bindsource1 | |
proc compat::bindsource2 {window type script} { | |
set type [normalise_type $type] | |
::tkdnd::drag_source register $window $type | |
bind $window <<DragInitCmd>> "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 | |