1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/ext/tk/lib/tkextlib/blt/dragdrop.rb
nagai 532e34fcd2 * ext/tk/lib/tkextlib/blt.rb: add BLT extension support
* ext/tk/lib/tkextlib/blt/*.rb: ditto
* ext/tk/lib/tkextlib/blt/tile/*.rb: ditto


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7645 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2004-12-23 16:23:30 +00:00

199 lines
4.8 KiB
Ruby

#
# tkextlib/blt/dragdrop.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tk/itemconfig'
require 'tkextlib/blt.rb'
module Tk::BLT
module DragDrop
extend TkCore
TkCommandNames = ['::blt::drag&drop'.freeze].freeze
class Token < TkWindow
WidgetClassName = 'DragDropToken'.freeze
WidgetClassNames[WidgetClassName] = self
def initialize(arg)
if arg.kind_of?(Hash) # arg is a hash includes the widgetpath of token
arg = _symbolkey2str(arg)
install_win(nil, arg['widgetname'])
else # arg is a drag&drop source
tk_call('::blt::drag&drop', 'source', arg)
install_win(nil, tk_call('::blt::drag&drop', 'token', arg))
end
end
end
###################################
extend TkItemConfigMethod
extend Tk::ValidateConfigure
class << self
def __item_config_cmd(id) # id := ['source'|'target', win]
['::blt::drag&drop', id[0], id[1]]
end
private :__item_config_cmd
undef itemcget
private :itemconfigure, :itemconfiginfo, :current_itemconfiginfo
def source_configure(win, slot, value=None)
itemconfigure(['source', win], slot, value)
end
def source_configinfo(win, slot=nil)
itemconfiginfo(['source', win], slot)
end
def current_source_configinfo(win, slot=nil)
current_itemconfiginfo(['source', win], slot)
end
end
class PackageCommand < TkValidateCommand
class ValidateArgs < TkUtil::CallbackSubst
KEY_TBL = [
[ ?t, ?w, :token ],
[ ?W, ?w, :widget ],
nil
]
PROC_TBL = [
[ ?w, TkComm.method(:window) ],
nil
]
_setup_subst_table(KEY_TBL, PROC_TBL)
def self.ret_val(val)
val
end
end
def self._config_keys
['packagecmd']
end
end
class SiteCommand < TkValidateCommand
class ValidateArgs < TkUtil::CallbackSubst
KEY_TBL = [
[ ?s, ?b, :compatible ],
[ ?t, ?w, :token ],
nil
]
PROC_TBL = [
[ ?b, TkComm.method(:bool) ],
[ ?w, TkComm.method(:window) ],
nil
]
_setup_subst_table(KEY_TBL, PROC_TBL)
def self.ret_val(val)
val
end
end
def self._config_keys
['sitecmd']
end
end
def self.__validation_class_list
super << PackageCommand << SiteCommand
end
class << self
Tk::ValidateConfigure.__def_validcmd(binding, PackageCommand)
Tk::ValidateConfigure.__def_validcmd(binding, SiteCommand)
end
###################################
class DnD_Handle < TkUtil::CallbackSubst
KEY_TBL = [
[ ?i, ?s, :ip_name ],
[ ?v, ?v, :value ],
[ ?W, ?w, :widget ],
nil
]
PROC_TBL = [
[ ?i, TkComm.method(:string) ],
[ ?v, TkComm.method(:tk_tcl2ruby) ],
[ ?w, TkComm.method(:window) ],
nil
]
_setup_subst_table(KEY_TBL, PROC_TBL)
end
def self.source_handler(win, datatype, cmd=Proc.new, *args)
_bind_for_event_class(DnD_Handle,
['::blt::drag&drop', 'source', win, 'handler'],
cmd, *args)
end
def self.target_handler(win, datatype, cmd=Proc.new, *args)
_bind_for_event_class(DnD_Handle,
['::blt::drag&drop', 'target', win, 'handler'],
cmd, *args)
end
###################################
def self.init_source(win)
tk_call('::blt::drag&drop', 'source', win)
end
def self.source()
list(tk_call('::blt::drag&drop', 'source'))
end
def self.source_handler_list(win)
simplelist(tk_call('::blt::drag&drop', 'source', win, 'handler'))
end
def self.source_handler_info(win, type)
tk_tcl2ruby(tk_call('::blt::drag&drop', 'source', win, 'handler', type))
end
def self.target
list(tk_call('::blt::drag&drop', 'target'))
end
def self.target_handler_list(win)
simplelist(tk_call('::blt::drag&drop', 'target', win, 'handler'))
end
def self.handle_target(win, type, val=None)
tk_call('::blt::drag&drop', 'target', win, 'handle', type, val)
end
def self.token(win)
window(tk_call('::blt::drag&drop', 'token', win))
end
def self.drag(win, x, y)
tk_call('::blt::drag&drop', 'drag', win, x, y)
end
def self.drop(win, x, y)
tk_call('::blt::drag&drop', 'drop', win, x, y)
end
def self.errors(cmd=Proc.new)
tk_call('::blt::drag&drop', 'errors', cmd)
end
def self.active
bool(tk_call('::blt::drag&drop', 'active'))
end
def self.location(x=None, y=None)
list(tk_call('::blt::drag&drop', 'location', x, y))
end
end
end