mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00

* small bug fix * rename 'no_create' option to 'without_creating' * add TkWindow#pack_in, TkWindow#grid_in, TkWindow#place_in * add TkWindow#bind_class and TkWindow#database_class If defined specific_class (@db_class), bind_class returns @db_class. In other case, bind_class returns TkWinow#class(). It is useful for binding. TkWindow#database_class is defined for querying the option database. It's same to TkWinfo.classname(self). * add TkBindTag.new_by_name and TkDatabaseClass for binding to database class * check varname whether already exsist or not. (TkVarAccess.new) * TkTextWin#bbox returns an array of four numbers * autoload TkDialog2, TkWarning2 * scan event callback arguments and convert to proper type * TkBindTag.new accepts a block ( TkBindTag.new(context){callback} ) * If given taglist, TkWindow#bindtags(taglist) returns taglist * add TkWindow#bindtags=(taglist) * Tk.focue and Tk.focus_lastfor return nil if there is no target widget. * Tk::Wm.client returns the argument string when setting name * TkGrid.columnconfiginfo and rowconfiginfo given a slot return a number. * TkWindow.grid_columnconfiginfo and grid_rowconfiginfo :: ditto * rename and define alias :: TkOption ==> TkOptionDB * define alias :: TkTimer ==> TkAfter * some instance methods change from public to private * some TkComm methods change to module functions (help to treat return values from Tk) * add support for -displayof option to some TkWinfo methods * bind, bind_append and bind_remove :: returns the target of event-binding * add Tk8.4 features * add TkPaneWindow tkdialog.rb: * classes without showing at initialize : TkDialog2, TkWarning2 * add show method to reuse TkDialog object * some instance methods change from public to private * add new features for configuration tktext.rb : * small bug fix * some methods return self * add TkTextMark#+(mod) and TkTextMark#-(mod) (e.g. mark + '3 chars') * add some methods tkcanvas.rb : * small bug fix * some methods return self tkentry.rb : * some methods return self * TkEntry#bbox returns an array of four numbers * scan validatecommand arguments and convert to proper type tkbgerror.rb : * support to define a error handler by user tcltklib.rb : * reported by Ferenc Engard <engard@all.hu> on [ruby-talk:60759] ... and so on git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3960 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
88 lines
1.9 KiB
Ruby
88 lines
1.9 KiB
Ruby
#
|
|
# tkvirtevent.rb : treats virtual events
|
|
# 1998/07/16 by Hidetoshi Nagai <nagai@ai.kyutech.ac.jp>
|
|
#
|
|
require 'tk'
|
|
|
|
class TkVirtualEvent<TkObject
|
|
extend Tk
|
|
|
|
TkVirtualEventID = [0]
|
|
TkVirtualEventTBL = {}
|
|
|
|
TkComm::INITIALIZE_TARGETS << self
|
|
|
|
def self.__init_tables__
|
|
TkVirtualEventTBL.clear
|
|
TkVirtualEventID[0] = 0
|
|
end
|
|
|
|
class PreDefVirtEvent<self
|
|
def initialize(event)
|
|
@path = @id = event
|
|
TkVirtualEvent::TkVirtualEventTBL[@id] = self
|
|
end
|
|
end
|
|
|
|
def TkVirtualEvent.getobj(event)
|
|
obj = TkVirtualEventTBL[event]
|
|
if obj
|
|
obj
|
|
else
|
|
if tk_call('event', 'info').index("<#{event}>")
|
|
PreDefVirtEvent.new(event)
|
|
else
|
|
fail ArgumentError, "undefined virtual event '<#{event}>'"
|
|
end
|
|
end
|
|
end
|
|
|
|
def TkVirtualEvent.info
|
|
tk_call('event', 'info').split(/\s+/).collect!{|seq|
|
|
TkVirtualEvent.getobj(seq[1..-2])
|
|
}
|
|
end
|
|
|
|
def initialize(*sequences)
|
|
@path = @id = format("<VirtEvent%.4d>", TkVirtualEventID[0])
|
|
TkVirtualEventID[0] += 1
|
|
add(*sequences)
|
|
end
|
|
|
|
def add(*sequences)
|
|
if sequences != []
|
|
tk_call('event', 'add', "<#{@id}>",
|
|
*(sequences.collect{|seq| "<#{tk_event_sequence(seq)}>"}) )
|
|
TkVirtualEventTBL[@id] = self
|
|
end
|
|
self
|
|
end
|
|
|
|
def delete(*sequences)
|
|
if sequences == []
|
|
tk_call('event', 'delete', "<#{@id}>")
|
|
TkVirtualEventTBL.delete(@id)
|
|
else
|
|
tk_call('event', 'delete', "<#{@id}>",
|
|
*(sequences.collect{|seq| "<#{tk_event_sequence(seq)}>"}) )
|
|
TkVirtualEventTBL.delete(@id) if info == []
|
|
end
|
|
self
|
|
end
|
|
|
|
def info
|
|
tk_call('event', 'info', "<#{@id}>").split(/\s+/).collect!{|seq|
|
|
l = seq.scan(/<*[^<>]+>*/).collect!{|subseq|
|
|
case (subseq)
|
|
when /^<<[^<>]+>>$/
|
|
TkVirtualEvent.getobj(subseq[1..-2])
|
|
when /^<[^<>]+>$/
|
|
subseq[1..-2]
|
|
else
|
|
subseq.split('')
|
|
end
|
|
}.flatten
|
|
(l.size == 1) ? l[0] : l
|
|
}
|
|
end
|
|
end
|