summaryrefslogtreecommitdiff
path: root/ext/tk/lib/tkentry.rb
diff options
context:
space:
mode:
authornagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-06-18 19:46:20 +0000
committernagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-06-18 19:46:20 +0000
commitd8b02b509608c5b90056c7befa89fa29fda45f8f (patch)
treefa79099d51b611202df51b03218b0743c2cdfbf1 /ext/tk/lib/tkentry.rb
parent151f1241c665b0307234e931bec2c32bfea0138d (diff)
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: svn+ssh://ci.ruby-lang.org/ruby/trunk@3960 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/tk/lib/tkentry.rb')
-rw-r--r--ext/tk/lib/tkentry.rb80
1 files changed, 54 insertions, 26 deletions
diff --git a/ext/tk/lib/tkentry.rb b/ext/tk/lib/tkentry.rb
index 2772dfd676..20cca6bec7 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)