diff options
| author | nagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-06-18 19:46:20 +0000 |
|---|---|---|
| committer | nagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-06-18 19:46:20 +0000 |
| commit | c8f0030e1ec23245909e395e458dcb5d06a2ebba (patch) | |
| tree | fa79099d51b611202df51b03218b0743c2cdfbf1 /ext/tk/lib/tkentry.rb | |
| parent | 3babfd92df08cc0c61cfa4cae5d8ffcdbc8c3923 (diff) | |
| download | ruby-c8f0030e1ec23245909e395e458dcb5d06a2ebba.tar.gz ruby-c8f0030e1ec23245909e395e458dcb5d06a2ebba.tar.xz ruby-c8f0030e1ec23245909e395e458dcb5d06a2ebba.zip | |
tk.rb :
* 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: http://svn.ruby-lang.org/repos/ruby/trunk@3960 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/tk/lib/tkentry.rb')
| -rw-r--r-- | ext/tk/lib/tkentry.rb | 80 |
1 files changed, 54 insertions, 26 deletions
diff --git a/ext/tk/lib/tkentry.rb b/ext/tk/lib/tkentry.rb index 2772dfd67..20cca6bec 100644 --- a/ext/tk/lib/tkentry.rb +++ b/ext/tk/lib/tkentry.rb @@ -10,14 +10,39 @@ class TkEntry<TkLabel WidgetClassName = 'Entry'.freeze WidgetClassNames[WidgetClassName] = self - def self.to_eval - WidgetClassName - end class ValidateCmd include TkComm class ValidateArgs + VARG_KEY = 'disvPSVW' + VARG_TYPE = 'nnsssssw' + + def self.scan_args(arg_str, arg_val) + arg_cnv = [] + arg_str.strip.split(/\s+/).each_with_index{|kwd,idx| + if kwd =~ /^%(.)$/ + if num = VARG_KEY.index($1) + case VARG_TYPE[num] + when ?n + arg_cnv << TkComm::number(arg_val[idx]) + when ?s + arg_cnv << TkComm::string(arg_val[idx]) + when ?w + arg_cnv << TkComm::window(arg_val[idx]) + else + arg_cnv << arg_val[idx] + end + else + arg_cnv << arg_val[idx] + end + else + arg_cnv << arg_val[idx] + end + } + arg_cnv + end + def initialize(d,i,s,v,pp,ss,vv,ww) @action = d @index = i @@ -40,13 +65,19 @@ class TkEntry<TkLabel def initialize(cmd = Proc.new, args=nil) if args - @id = install_cmd(proc{|*arg| - TkUtil.eval_cmd cmd, *arg - }) + " " + args + @id = + install_cmd(proc{|*arg| + TkUtil.eval_cmd(cmd, ValidateArgs.scan_args(args, arg)) + }) + " " + args else - @id = install_cmd(proc{|arg| - TkUtil.eval_cmd cmd, ValidateArgs.new(*arg) - }) + ' %d %i %s %v %P %S %V %W' + args = ' %d %i %s %v %P %S %V %W' + @id = + install_cmd(proc{|*arg| + TkUtil.eval_cmd( + cmd, + ValidateArgs.new(ValidateArgs.scan_args(args, arg)) + ) + }) + args end end @@ -63,14 +94,6 @@ class TkEntry<TkLabel end end - def bbox(index) - tk_send 'bbox', index - end - - def delete(s, e=None) - tk_send 'delete', s, e - end - def configure(slot, value=None) if slot.kind_of? Hash slot = _symbolkey2str(slot) @@ -113,54 +136,60 @@ class TkEntry<TkLabel end super(slot, value) end + self end def cursor - tk_send 'index', 'insert' + number(tk_send('index', 'insert')) end def cursor=(index) tk_send 'icursor', index + self end def index(index) number(tk_send('index', index)) end def insert(pos,text) tk_send 'insert', pos, text + self end def mark(pos) tk_send 'scan', 'mark', pos + self end def dragto(pos) tk_send 'scan', 'dragto', pos + self end def selection_adjust(index) tk_send 'selection', 'adjust', index + self end def selection_clear tk_send 'selection', 'clear' + self end def selection_from(index) tk_send 'selection', 'from', index + self end def selection_present() bool(tk_send('selection', 'present')) end def selection_range(s, e) tk_send 'selection', 'range', s, e + self end def selection_to(index) tk_send 'selection', 'to', index + self end def validate(mode = nil) if mode configure 'validate', mode else - if tk_send('validate') == '0' - false - else - true - end + bool(tk_send('validate')) end end @@ -194,9 +223,6 @@ end class TkSpinbox<TkEntry WidgetClassName = 'Spinbox'.freeze WidgetClassNames[WidgetClassName] = self - def self.to_eval - WidgetClassName - end def create_self(keys) if keys and keys != None @@ -212,10 +238,12 @@ class TkSpinbox<TkEntry def spinup tk_send 'invoke', 'spinup' + self end def spindown tk_send 'invoke', 'spindown' + self end def set(str) |
