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

* ext/tk/, ext/tcltklib/: bug fix

* ext/tk/lib/tk.rb: better operation for SIGINT when processing callbacks.
* ext/tk/lib/tk/msgcat.rb: ditto.
* ext/tk/lib/tk/variable.rb: ditto.
* ext/tk/lib/tk/timer.rb: ditto.
* ext/tk/lib/tk/validation.rb: add Tk::ValidateConfigure.__def_validcmd()
  to define validatecommand methods easier
* ext/tk/lib/tk.rb (_genobj_for_tkwidget): support autoload Tk ext classes
* ext/tk/lib/tk/canvas.rb and so on: remove the parent widget type check
  for items (e.g. canvas items; depends on the class) to avoid some troubles
  on Tk extension widget class definition.
* ext/tk/lib/tkextlib/: add Iwidget and TkTable extension support
* ext/tk/sample/tkextlib/: add samples of Iwidget and TkTable


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@6630 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nagai 2004-07-15 01:18:57 +00:00
parent 6e918be6b1
commit 1ac70e2f77
133 changed files with 5614 additions and 183 deletions

View file

@ -1,3 +1,28 @@
Thu Jul 15 10:15:04 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tk/, ext/tcltklib/: bug fix
* ext/tk/lib/tk.rb: better operation for SIGINT when processing
callbacks.
* ext/tk/lib/tk/msgcat.rb: ditto.
* ext/tk/lib/tk/variable.rb: ditto.
* ext/tk/lib/tk/timer.rb: ditto.
* ext/tk/lib/tk/validation.rb: add Tk::ValidateConfigure.__def_validcmd
to define validatecommand methods easier
* ext/tk/lib/tk.rb (_genobj_for_tkwidget): support autoload Tk ext
classes
* ext/tk/lib/tk/canvas.rb and so on: remove the parent widget type
check for items (e.g. canvas items; depends on the class) to
avoid some troubles on Tk extension widget class definition.
* ext/tk/lib/tkextlib/: add Iwidget and TkTable extension support
* ext/tk/sample/tkextlib/: add samples of Iwidget and TkTable
Wed Jul 14 18:08:37 2004 GOTOU Yuuzou <gotoyuzo@notwork.org> Wed Jul 14 18:08:37 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
* ext/openssl/ossl_asn1.c (ossl_asn1cons_to_der): fix type of * ext/openssl/ossl_asn1.c (ossl_asn1cons_to_der): fix type of

View file

@ -4401,20 +4401,21 @@ ip_get_variable2(self, varname_arg, index_arg, flag_arg)
ret = Tcl_ObjGetVar2(ptr->ip, nameobj, idxobj, FIX2INT(flag)); ret = Tcl_ObjGetVar2(ptr->ip, nameobj, idxobj, FIX2INT(flag));
Tcl_IncrRefCount(ret);
Tcl_DecrRefCount(nameobj); Tcl_DecrRefCount(nameobj);
Tcl_DecrRefCount(idxobj); Tcl_DecrRefCount(idxobj);
rb_thread_critical = thr_crit_bup; rb_thread_critical = thr_crit_bup;
if (ret == (Tcl_Obj*)NULL) { if (ret == (Tcl_Obj*)NULL) {
Tcl_DecrRefCount(ret);
#if TCL_MAJOR_VERSION >= 8 #if TCL_MAJOR_VERSION >= 8
rb_raise(rb_eRuntimeError, "%s", Tcl_GetStringResult(ptr->ip)); rb_raise(rb_eRuntimeError, "%s", Tcl_GetStringResult(ptr->ip));
#else /* TCL_MAJOR_VERSION < 8 */ #else /* TCL_MAJOR_VERSION < 8 */
rb_raise(rb_eRuntimeError, "%s", ptr->ip->result); rb_raise(rb_eRuntimeError, "%s", ptr->ip->result);
#endif #endif
} }
Tcl_IncrRefCount(ret);
# if TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION == 0 # if TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION == 0
s = Tcl_GetStringFromObj(ret, &len); s = Tcl_GetStringFromObj(ret, &len);
strval = rb_tainted_str_new(s, len); strval = rb_tainted_str_new(s, len);

View file

@ -1,3 +1,15 @@
2004-07-15 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* bug fix
* support TkTable extension
2004-07-12 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* bug fix
* support Iwidgets extension
2004-07-10 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp> 2004-07-10 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* bug fix * bug fix

View file

@ -161,12 +161,32 @@ lib/tkextlib/iwidgets/hyperhelp.rb
lib/tkextlib/iwidgets/labeledframe.rb lib/tkextlib/iwidgets/labeledframe.rb
lib/tkextlib/iwidgets/labeledwidget.rb lib/tkextlib/iwidgets/labeledwidget.rb
lib/tkextlib/iwidgets/mainwindow.rb lib/tkextlib/iwidgets/mainwindow.rb
lib/tkextlib/iwidgets/menubar.rb
lib/tkextlib/iwidgets/messagebox.rb lib/tkextlib/iwidgets/messagebox.rb
lib/tkextlib/iwidgets/messagedialog.rb lib/tkextlib/iwidgets/messagedialog.rb
lib/tkextlib/iwidgets/notebook.rb
lib/tkextlib/iwidgets/optionmenu.rb
lib/tkextlib/iwidgets/panedwindow.rb
lib/tkextlib/iwidgets/promptdialog.rb
lib/tkextlib/iwidgets/pushbutton.rb
lib/tkextlib/iwidgets/radiobox.rb lib/tkextlib/iwidgets/radiobox.rb
lib/tkextlib/iwidgets/scopedobject.rb
lib/tkextlib/iwidgets/scrolledcanvas.rb
lib/tkextlib/iwidgets/scrolledframe.rb
lib/tkextlib/iwidgets/scrolledhtml.rb
lib/tkextlib/iwidgets/scrolledlistbox.rb
lib/tkextlib/iwidgets/scrolledtext.rb
lib/tkextlib/iwidgets/scrolledwidget.rb lib/tkextlib/iwidgets/scrolledwidget.rb
lib/tkextlib/iwidgets/selectionbox.rb
lib/tkextlib/iwidgets/selectiondialog.rb
lib/tkextlib/iwidgets/setup.rb lib/tkextlib/iwidgets/setup.rb
lib/tkextlib/iwidgets/shell.rb lib/tkextlib/iwidgets/shell.rb
lib/tkextlib/iwidgets/spindate.rb
lib/tkextlib/iwidgets/spinint.rb
lib/tkextlib/iwidgets/spinner.rb
lib/tkextlib/iwidgets/spintime.rb
lib/tkextlib/iwidgets/tabnotebook.rb
lib/tkextlib/iwidgets/tabset.rb
lib/tkextlib/iwidgets/timeentry.rb lib/tkextlib/iwidgets/timeentry.rb
lib/tkextlib/iwidgets/timefield.rb lib/tkextlib/iwidgets/timefield.rb
lib/tkextlib/iwidgets/toolbar.rb lib/tkextlib/iwidgets/toolbar.rb
@ -217,7 +237,9 @@ lib/tkextlib/tkimg/tiff.rb
lib/tkextlib/tkimg/window.rb lib/tkextlib/tkimg/window.rb
lib/tkextlib/tkimg/xbm.rb lib/tkextlib/tkimg/xbm.rb
lib/tkextlib/tkimg/xpm.rb lib/tkextlib/tkimg/xpm.rb
lib/tkextlib/tktrans.rb lib/tkextlib/tktable.rb
lib/tkextlib/tktable/setup.rb
lib/tkextlib/tktable/tktable.rb
lib/tkextlib/tktrans/setup.rb lib/tkextlib/tktrans/setup.rb
lib/tkextlib/tktrans/tktrans.rb lib/tkextlib/tktrans/tktrans.rb
lib/tkextlib/treectrl.rb lib/tkextlib/treectrl.rb
@ -472,7 +494,28 @@ sample/tkextlib/bwidget/select.rb
sample/tkextlib/bwidget/tmpldlg.rb sample/tkextlib/bwidget/tmpldlg.rb
sample/tkextlib/bwidget/tree.rb sample/tkextlib/bwidget/tree.rb
sample/tkextlib/bwidget/x1.xbm sample/tkextlib/bwidget/x1.xbm
sample/tkextlib/iwidgets/catalog_demo/LICENSE.orig
sample/tkextlib/iwidgets/catalog_demo/images/box.xbm
sample/tkextlib/iwidgets/catalog_demo/images/clear.gif sample/tkextlib/iwidgets/catalog_demo/images/clear.gif
sample/tkextlib/iwidgets/catalog_demo/images/close.gif
sample/tkextlib/iwidgets/catalog_demo/images/copy.gif
sample/tkextlib/iwidgets/catalog_demo/images/cut.gif
sample/tkextlib/iwidgets/catalog_demo/images/exit.gif
sample/tkextlib/iwidgets/catalog_demo/images/find.gif
sample/tkextlib/iwidgets/catalog_demo/images/help.gif
sample/tkextlib/iwidgets/catalog_demo/images/line.xbm
sample/tkextlib/iwidgets/catalog_demo/images/mag.gif
sample/tkextlib/iwidgets/catalog_demo/images/new.gif
sample/tkextlib/iwidgets/catalog_demo/images/open.gif
sample/tkextlib/iwidgets/catalog_demo/images/oval.xbm
sample/tkextlib/iwidgets/catalog_demo/images/paste.gif
sample/tkextlib/iwidgets/catalog_demo/images/points.xbm
sample/tkextlib/iwidgets/catalog_demo/images/poly.gif
sample/tkextlib/iwidgets/catalog_demo/images/print.gif
sample/tkextlib/iwidgets/catalog_demo/images/ruler.gif
sample/tkextlib/iwidgets/catalog_demo/images/save.gif
sample/tkextlib/iwidgets/catalog_demo/images/select.gif
sample/tkextlib/iwidgets/catalog_demo/images/text.xbm
sample/tkextlib/iwidgets/sample/buttonbox.rb sample/tkextlib/iwidgets/sample/buttonbox.rb
sample/tkextlib/iwidgets/sample/calendar.rb sample/tkextlib/iwidgets/sample/calendar.rb
sample/tkextlib/iwidgets/sample/canvasprintbox.rb sample/tkextlib/iwidgets/sample/canvasprintbox.rb
@ -493,16 +536,43 @@ sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb
sample/tkextlib/iwidgets/sample/feedback.rb sample/tkextlib/iwidgets/sample/feedback.rb
sample/tkextlib/iwidgets/sample/fileselectionbox.rb sample/tkextlib/iwidgets/sample/fileselectionbox.rb
sample/tkextlib/iwidgets/sample/fileselectiondialog.rb sample/tkextlib/iwidgets/sample/fileselectiondialog.rb
sample/tkextlib/iwidgets/sample/finddialog.rb
sample/tkextlib/iwidgets/sample/hierarchy.rb sample/tkextlib/iwidgets/sample/hierarchy.rb
sample/tkextlib/iwidgets/sample/hyperhelp.rb sample/tkextlib/iwidgets/sample/hyperhelp.rb
sample/tkextlib/iwidgets/sample/labeledframe.rb
sample/tkextlib/iwidgets/sample/labeledwidget.rb sample/tkextlib/iwidgets/sample/labeledwidget.rb
sample/tkextlib/iwidgets/sample/mainwindow.rb
sample/tkextlib/iwidgets/sample/menubar.rb
sample/tkextlib/iwidgets/sample/menubar2.rb
sample/tkextlib/iwidgets/sample/messagebox1.rb sample/tkextlib/iwidgets/sample/messagebox1.rb
sample/tkextlib/iwidgets/sample/messagebox2.rb sample/tkextlib/iwidgets/sample/messagebox2.rb
sample/tkextlib/iwidgets/sample/messagedialog.rb sample/tkextlib/iwidgets/sample/messagedialog.rb
sample/tkextlib/iwidgets/sample/notebook.rb
sample/tkextlib/iwidgets/sample/notebook2.rb
sample/tkextlib/iwidgets/sample/optionmenu.rb
sample/tkextlib/iwidgets/sample/panedwindow.rb
sample/tkextlib/iwidgets/sample/panedwindow2.rb
sample/tkextlib/iwidgets/sample/promptdialog.rb
sample/tkextlib/iwidgets/sample/pushbutton.rb
sample/tkextlib/iwidgets/sample/radiobox.rb sample/tkextlib/iwidgets/sample/radiobox.rb
sample/tkextlib/iwidgets/sample/scrolledcanvas.rb
sample/tkextlib/iwidgets/sample/scrolledframe.rb
sample/tkextlib/iwidgets/sample/scrolledhtml.rb
sample/tkextlib/iwidgets/sample/scrolledlistbox.rb
sample/tkextlib/iwidgets/sample/scrolledtext.rb
sample/tkextlib/iwidgets/sample/selectionbox.rb
sample/tkextlib/iwidgets/sample/selectiondialog.rb
sample/tkextlib/iwidgets/sample/shell.rb sample/tkextlib/iwidgets/sample/shell.rb
sample/tkextlib/iwidgets/sample/spindate.rb
sample/tkextlib/iwidgets/sample/spinint.rb
sample/tkextlib/iwidgets/sample/spinner.rb
sample/tkextlib/iwidgets/sample/spintime.rb
sample/tkextlib/iwidgets/sample/tabnotebook.rb
sample/tkextlib/iwidgets/sample/tabnotebook2.rb
sample/tkextlib/iwidgets/sample/tabset.rb
sample/tkextlib/iwidgets/sample/timeentry.rb sample/tkextlib/iwidgets/sample/timeentry.rb
sample/tkextlib/iwidgets/sample/timefield.rb sample/tkextlib/iwidgets/sample/timefield.rb
sample/tkextlib/iwidgets/sample/toolbar.rb
sample/tkextlib/iwidgets/sample/watch.rb sample/tkextlib/iwidgets/sample/watch.rb
sample/tkextlib/tcllib/LICENSE.orig sample/tkextlib/tcllib/LICENSE.orig
sample/tkextlib/tcllib/datefield.rb sample/tkextlib/tcllib/datefield.rb
@ -510,6 +580,7 @@ sample/tkextlib/tcllib/plotdemos1.rb
sample/tkextlib/tcllib/plotdemos2.rb sample/tkextlib/tcllib/plotdemos2.rb
sample/tkextlib/tcllib/plotdemos3.rb sample/tkextlib/tcllib/plotdemos3.rb
sample/tkextlib/tcllib/xyplot.rb sample/tkextlib/tcllib/xyplot.rb
sample/tkextlib/tkHTML/COPYRIGHT.orig
sample/tkextlib/tkHTML/README sample/tkextlib/tkHTML/README
sample/tkextlib/tkHTML/hv.rb sample/tkextlib/tkHTML/hv.rb
sample/tkextlib/tkHTML/ss.rb sample/tkextlib/tkHTML/ss.rb
@ -593,6 +664,14 @@ sample/tkextlib/tkHTML/page4/image7
sample/tkextlib/tkHTML/page4/image8 sample/tkextlib/tkHTML/page4/image8
sample/tkextlib/tkHTML/page4/image9 sample/tkextlib/tkHTML/page4/image9
sample/tkextlib/tkHTML/page4/index.html sample/tkextlib/tkHTML/page4/index.html
sample/tkextlib/tktable/LICENSE.orig
sample/tkextlib/tktable/basic.rb
sample/tkextlib/tktable/buttons.rb
sample/tkextlib/tktable/command.rb
sample/tkextlib/tktable/debug.rb
sample/tkextlib/tktable/dynarows.rb
sample/tkextlib/tktable/maxsize.rb
sample/tkextlib/tktable/valid.rb
sample/tkextlib/vu/LICENSE.orig sample/tkextlib/vu/LICENSE.orig
sample/tkextlib/vu/README.txt sample/tkextlib/vu/README.txt
sample/tkextlib/vu/canvItems.rb sample/tkextlib/vu/canvItems.rb

View file

@ -26,6 +26,7 @@ module TkComm
extend TkUtil extend TkUtil
WidgetClassNames = {}.taint WidgetClassNames = {}.taint
TkExtlibAutoloadModule = [].taint
# None = Object.new ### --> definition is moved to TkUtil module # None = Object.new ### --> definition is moved to TkUtil module
# def None.to_s # def None.to_s
@ -92,17 +93,64 @@ module TkComm
# gen_class_name = ruby_class_name + 'GeneratedOnTk' # gen_class_name = ruby_class_name + 'GeneratedOnTk'
gen_class_name = ruby_class_name gen_class_name = ruby_class_name
classname_def = '' classname_def = ''
elsif Object.const_defined?('Tk' + tk_class) else # ruby_class == nil
ruby_class_name = 'Tk' + tk_class mods = TkExtlibAutoloadModule.find_all{|m| m.const_defined?(tk_class)}
mods.each{|mod|
begin
mod.const_get(tk_class) # auto_load
break if (ruby_class = WidgetClassNames[tk_class])
rescue LoadError
# ignore load error
end
}
unless ruby_class
std_class = 'Tk' << tk_class
if Object.const_defined?(std_class)
Object.const_get(std_class) # auto_load
ruby_class = WidgetClassNames[tk_class]
end
end
if ruby_class
# found
ruby_class_name = ruby_class.name
gen_class_name = ruby_class_name
classname_def = ''
else
# unknown
ruby_class_name = 'TkWindow'
gen_class_name = 'TkWidget_' + tk_class
classname_def = "WidgetClassName = '#{tk_class}'.freeze"
end
end
###################################
=begin
if ruby_class = WidgetClassNames[tk_class]
ruby_class_name = ruby_class.name
# gen_class_name = ruby_class_name + 'GeneratedOnTk' # gen_class_name = ruby_class_name + 'GeneratedOnTk'
gen_class_name = ruby_class_name gen_class_name = ruby_class_name
classname_def = '' classname_def = ''
else else
ruby_class_name = 'TkWindow' mod = TkExtlibAutoloadModule.find{|m| m.const_defined?(tk_class)}
# gen_class_name = ruby_class_name + tk_class + 'GeneratedOnTk' if mod
gen_class_name = 'TkWidget_' + tk_class ruby_class_name = mod.name + '::' + tk_class
classname_def = "WidgetClassName = '#{tk_class}'.freeze" gen_class_name = ruby_class_name
classname_def = ''
elsif Object.const_defined?('Tk' + tk_class)
ruby_class_name = 'Tk' + tk_class
# gen_class_name = ruby_class_name + 'GeneratedOnTk'
gen_class_name = ruby_class_name
classname_def = ''
else
ruby_class_name = 'TkWindow'
# gen_class_name = ruby_class_name + tk_class + 'GeneratedOnTk'
gen_class_name = 'TkWidget_' + tk_class
classname_def = "WidgetClassName = '#{tk_class}'.freeze"
end
end end
=end
=begin =begin
unless Object.const_defined? gen_class_name unless Object.const_defined? gen_class_name
@ -131,7 +179,12 @@ module TkComm
private :_genobj_for_tkwidget private :_genobj_for_tkwidget
module_function :_genobj_for_tkwidget module_function :_genobj_for_tkwidget
def tk_tcl2ruby(val, enc_mode = nil, listobj = true) def _at(x,y)
"@#{Integer(x)},#{Integer(y)}"
end
module_function :_at
def tk_tcl2ruby(val, enc_mode = false, listobj = true)
if val =~ /^rb_out\S* (c(_\d+_)?\d+)/ if val =~ /^rb_out\S* (c(_\d+_)?\d+)/
#return Tk_CMDTBL[$1] #return Tk_CMDTBL[$1]
return TkCore::INTERP.tk_cmd_tbl[$1] return TkCore::INTERP.tk_cmd_tbl[$1]
@ -181,7 +234,7 @@ module TkComm
private :tk_tcl2ruby private :tk_tcl2ruby
module_function :tk_tcl2ruby module_function :tk_tcl2ruby
private_class_method :tk_tcl2ruby #private_class_method :tk_tcl2ruby
unless const_defined?(:USE_TCLs_LIST_FUNCTIONS) unless const_defined?(:USE_TCLs_LIST_FUNCTIONS)
USE_TCLs_LIST_FUNCTIONS = true USE_TCLs_LIST_FUNCTIONS = true
@ -238,7 +291,8 @@ if USE_TCLs_LIST_FUNCTIONS
array2tk_list(e) array2tk_list(e)
elsif e.kind_of? Hash elsif e.kind_of? Hash
tmp_ary = [] tmp_ary = []
e.each{|k,v| tmp_ary << k << v } #e.each{|k,v| tmp_ary << k << v }
e.each{|k,v| tmp_ary << "-#{_get_eval_string(k)}" << v }
array2tk_list(tmp_ary) array2tk_list(tmp_ary)
else else
_get_eval_string(e) _get_eval_string(e)
@ -369,7 +423,9 @@ else
if e.kind_of? Array if e.kind_of? Array
"{#{array2tk_list(e)}}" "{#{array2tk_list(e)}}"
elsif e.kind_of? Hash elsif e.kind_of? Hash
"{#{e.to_a.collect{|ee| array2tk_list(ee)}.join(' ')}}" # "{#{e.to_a.collect{|ee| array2tk_list(ee)}.join(' ')}}"
e.each{|k,v| tmp_ary << "-#{_get_eval_string(k)}" << v }
array2tk_list(tmp_ary)
else else
s = _get_eval_string(e) s = _get_eval_string(e)
(s.index(/\s/) || s.size == 0)? "{#{s}}": s (s.index(/\s/) || s.size == 0)? "{#{s}}": s
@ -3108,7 +3164,6 @@ class TkObject<TkKernel
end end
end end
=begin
def tk_trace_variable(v) def tk_trace_variable(v)
unless v.kind_of?(TkVariable) unless v.kind_of?(TkVariable)
fail(ArgumentError, "type error (#{v.class}); must be TkVariable object") fail(ArgumentError, "type error (#{v.class}); must be TkVariable object")
@ -3116,7 +3171,6 @@ class TkObject<TkKernel
v v
end end
private :tk_trace_variable private :tk_trace_variable
=end
def destroy def destroy
#tk_call 'trace', 'vdelete', @tk_vn, 'w', @var_id if @var_id #tk_call 'trace', 'vdelete', @tk_vn, 'w', @var_id if @var_id

View file

@ -602,9 +602,9 @@ class TkcItem<TkObject
######################################## ########################################
def initialize(parent, *args) def initialize(parent, *args)
unless parent.kind_of?(TkCanvas) #unless parent.kind_of?(TkCanvas)
fail ArguemntError, "expect TkCanvas for 1st argument" # fail ArguemntError, "expect TkCanvas for 1st argument"
end #end
@parent = @c = parent @parent = @c = parent
@path = parent.path @path = parent.path

View file

@ -189,9 +189,9 @@ class TkcTag<TkObject
end end
def initialize(parent, mode=nil, *args) def initialize(parent, mode=nil, *args)
unless parent.kind_of?(TkCanvas) #unless parent.kind_of?(TkCanvas)
fail ArguemntError, "expect TkCanvas for 1st argument" # fail ArguemntError, "expect TkCanvas for 1st argument"
end #end
@c = parent @c = parent
@cpath = parent.path @cpath = parent.path
# @path = @id = Tk_CanvasTag_ID.join('') # @path = @id = Tk_CanvasTag_ID.join('')
@ -276,9 +276,9 @@ class TkcTagString<TkcTag
end end
def initialize(parent, name, mode=nil, *args) def initialize(parent, name, mode=nil, *args)
unless parent.kind_of?(TkCanvas) #unless parent.kind_of?(TkCanvas)
fail ArguemntError, "expect TkCanvas for 1st argument" # fail ArguemntError, "expect TkCanvas for 1st argument"
end #end
@c = parent @c = parent
@cpath = parent.path @cpath = parent.path
@path = @id = name @path = @id = name
@ -293,9 +293,9 @@ TkcNamedTag = TkcTagString
class TkcTagAll<TkcTag class TkcTagAll<TkcTag
def initialize(parent) def initialize(parent)
unless parent.kind_of?(TkCanvas) #unless parent.kind_of?(TkCanvas)
fail ArguemntError, "expect TkCanvas for 1st argument" # fail ArguemntError, "expect TkCanvas for 1st argument"
end #end
@c = parent @c = parent
@cpath = parent.path @cpath = parent.path
@path = @id = 'all' @path = @id = 'all'
@ -306,9 +306,9 @@ end
class TkcTagCurrent<TkcTag class TkcTagCurrent<TkcTag
def initialize(parent) def initialize(parent)
unless parent.kind_of?(TkCanvas) #unless parent.kind_of?(TkCanvas)
fail ArguemntError, "expect TkCanvas for 1st argument" # fail ArguemntError, "expect TkCanvas for 1st argument"
end #end
@c = parent @c = parent
@cpath = parent.path @cpath = parent.path
@path = @id = 'current' @path = @id = 'current'
@ -321,9 +321,9 @@ class TkcGroup<TkcTag
Tk_cGroup_ID = ['tkcg'.freeze, '00000'.taint].freeze Tk_cGroup_ID = ['tkcg'.freeze, '00000'.taint].freeze
#def create_self(parent, *args) #def create_self(parent, *args)
def initialize(parent, *args) def initialize(parent, *args)
unless parent.kind_of?(TkCanvas) #unless parent.kind_of?(TkCanvas)
fail ArguemntError, "expect TkCanvas for 1st argument" # fail ArguemntError, "expect TkCanvas for 1st argument"
end #end
@c = parent @c = parent
@cpath = parent.path @cpath = parent.path
# @path = @id = Tk_cGroup_ID.join('') # @path = @id = Tk_cGroup_ID.join('')

View file

@ -118,6 +118,10 @@ module TkEvent
# #
_setup_subst_table(KEY_TBL, PROC_TBL); _setup_subst_table(KEY_TBL, PROC_TBL);
#
# NOTE: The order of parameters which passed to callback procedure is
# <extra_arg>, <extra_arg>, ... , <subst_arg>, <subst_arg>, ...
#
# If you need support extra arguments given by Tcl/Tk, # If you need support extra arguments given by Tcl/Tk,
# please override _get_extra_args_tbl # please override _get_extra_args_tbl

View file

@ -320,9 +320,9 @@ class TkMenuClone<TkMenu
widgetname = keys.delete('widgetname') widgetname = keys.delete('widgetname')
type = keys.delete('type'); type = None unless type type = keys.delete('type'); type = None unless type
end end
unless parent.kind_of?(TkMenu) #unless parent.kind_of?(TkMenu)
fail ArgumentError, "parent must be TkMenu" # fail ArgumentError, "parent must be TkMenu"
end #end
@parent = parent @parent = parent
install_win(@parent.path, widgetname) install_win(@parent.path, widgetname)
tk_call_without_enc(@parent.path, 'clone', @path, type) tk_call_without_enc(@parent.path, 'clone', @path, type)
@ -336,9 +336,9 @@ module TkSystemMenu
keys = _symbolkey2str(parent) keys = _symbolkey2str(parent)
parent = keys.delete('parent') parent = keys.delete('parent')
end end
unless parent.kind_of? TkMenu #unless parent.kind_of? TkMenu
fail ArgumentError, "parent must be a TkMenu object" # fail ArgumentError, "parent must be a TkMenu object"
end #end
# @path = Kernel.format("%s.%s", parent.path, self.class::SYSMENU_NAME) # @path = Kernel.format("%s.%s", parent.path, self.class::SYSMENU_NAME)
@path = parent_path + '.' + self.class::SYSMENU_NAME @path = parent_path + '.' + self.class::SYSMENU_NAME
#TkComm::Tk_WINDOWS[@path] = self #TkComm::Tk_WINDOWS[@path] = self

View file

@ -144,6 +144,30 @@ module TkMenuSpec
end end
private :_create_menu private :_create_menu
def _use_menubar?(parent)
use_menubar = false
if parent.kind_of?(TkRoot) || parent.kind_of?(TkToplevel)
return true
else
begin
parent.cget('menu')
return true
rescue
end
end
false
end
private :_use_menubar?
def _create_menu_for_menubar(parent)
unless (mbar = parent.menu).kind_of?(TkMenu)
mbar = TkMenu.new(parent, :tearoff=>false)
parent.menu(mbar)
end
mbar
end
private :_create_menu_for_menubar
def _create_menubutton(parent, menu_info, tearoff=false, default_opts = nil) def _create_menubutton(parent, menu_info, tearoff=false, default_opts = nil)
btn_info = menu_info[0] btn_info = menu_info[0]
@ -160,12 +184,10 @@ module TkMenuSpec
tearoff = keys.delete('tearoff') if keys.key?('tearoff') tearoff = keys.delete('tearoff') if keys.key?('tearoff')
if parent.kind_of?(TkRoot) || parent.kind_of?(TkToplevel) if _use_menubar?(parent)
# menubar by menu entries # menubar by menu entries
unless (mbar = parent.menu).kind_of?(TkMenu)
mbar = TkMenu.new(parent, :tearoff=>false) mbar = _create_menu_for_menubar(parent)
parent.menu(mbar)
end
menu_name = nil menu_name = nil

View file

@ -502,9 +502,9 @@ class TkText<TkTextWin
if TkTextTag::TTagID_TBL[@path] if TkTextTag::TTagID_TBL[@path]
tags.each{|tag| tags.each{|tag|
if tag.kind_of? TkTextTag if tag.kind_of? TkTextTag
TTagID_TBL[@path].delete(tag.id) TkTextTag::TTagID_TBL[@path].delete(tag.id)
else else
TTagID_TBL[@path].delete(tag) TkTextTag::TTagID_TBL[@path].delete(tag)
end end
} }
end end

View file

@ -6,9 +6,9 @@ require 'tk/text'
class TkTextImage<TkObject class TkTextImage<TkObject
def initialize(parent, index, keys) def initialize(parent, index, keys)
unless parent.kind_of?(TkText) #unless parent.kind_of?(TkText)
fail ArguemntError, "expect TkText for 1st argument" # fail ArguemntError, "expect TkText for 1st argument"
end #end
@t = parent @t = parent
if index == 'end' if index == 'end'
@path = TkTextMark.new(@t, tk_call(@t.path, 'index', 'end - 1 chars')) @path = TkTextMark.new(@t, tk_call(@t.path, 'index', 'end - 1 chars'))

View file

@ -17,9 +17,9 @@ class TkTextMark<TkObject
end end
def initialize(parent, index) def initialize(parent, index)
unless parent.kind_of?(TkText) #unless parent.kind_of?(TkText)
fail ArguemntError, "expect TkText for 1st argument" # fail ArguemntError, "expect TkText for 1st argument"
end #end
@parent = @t = parent @parent = @t = parent
@tpath = parent.path @tpath = parent.path
# @path = @id = Tk_TextMark_ID.join('') # @path = @id = Tk_TextMark_ID.join('')
@ -101,9 +101,9 @@ class TkTextNamedMark<TkTextMark
end end
def initialize(parent, name, index=nil) def initialize(parent, name, index=nil)
unless parent.kind_of?(TkText) #unless parent.kind_of?(TkText)
fail ArguemntError, "expect TkText for 1st argument" # fail ArguemntError, "expect TkText for 1st argument"
end #end
@parent = @t = parent @parent = @t = parent
@tpath = parent.path @tpath = parent.path
@path = @id = name @path = @id = name

View file

@ -20,14 +20,14 @@ class TkTextTag<TkObject
end end
def initialize(parent, *args) def initialize(parent, *args)
unless parent.kind_of?(TkText) #unless parent.kind_of?(TkText)
fail ArguemntError, "expect TkText for 1st argument" # fail ArguemntError, "expect TkText for 1st argument"
end #end
@parent = @t = parent @parent = @t = parent
@tpath = parent.path @tpath = parent.path
# @path = @id = Tk_TextTag_ID.join('') # @path = @id = Tk_TextTag_ID.join('')
@path = @id = Tk_TextTag_ID.join(TkCore::INTERP._ip_id_) @path = @id = Tk_TextTag_ID.join(TkCore::INTERP._ip_id_)
TTagID_TBL[@id] = self # TTagID_TBL[@id] = self
TTagID_TBL[@tpath] = {} unless TTagID_TBL[@tpath] TTagID_TBL[@tpath] = {} unless TTagID_TBL[@tpath]
TTagID_TBL[@tpath][@id] = self TTagID_TBL[@tpath][@id] = self
Tk_TextTag_ID[1].succ! Tk_TextTag_ID[1].succ!
@ -221,9 +221,9 @@ class TkTextNamedTag<TkTextTag
end end
def initialize(parent, name, *args) def initialize(parent, name, *args)
unless parent.kind_of?(TkText) #unless parent.kind_of?(TkText)
fail ArguemntError, "expect TkText for 1st argument" # fail ArguemntError, "expect TkText for 1st argument"
end #end
@parent = @t = parent @parent = @t = parent
@tpath = parent.path @tpath = parent.path
@path = @id = name @path = @id = name

View file

@ -6,9 +6,9 @@ require 'tk/text'
class TkTextWindow<TkObject class TkTextWindow<TkObject
def initialize(parent, index, keys) def initialize(parent, index, keys)
unless parent.kind_of?(TkText) #unless parent.kind_of?(TkText)
fail ArguemntError, "expect TkText for 1st argument" # fail ArguemntError, "expect TkText for 1st argument"
end #end
@t = parent @t = parent
if index == 'end' if index == 'end'
@path = TkTextMark.new(@t, tk_call_without_enc(@t.path, 'index', @path = TkTextMark.new(@t, tk_call_without_enc(@t.path, 'index',

View file

@ -183,6 +183,7 @@ end
class TkValidateCommand class TkValidateCommand
include TkComm include TkComm
extend TkComm
class ValidateArgs < TkUtil::CallbackSubst class ValidateArgs < TkUtil::CallbackSubst
KEY_TBL = [ KEY_TBL = [
@ -227,14 +228,19 @@ class TkValidateCommand
_setup_subst_table(KEY_TBL, PROC_TBL); _setup_subst_table(KEY_TBL, PROC_TBL);
def self.ret_val(val) #
(val)? '1': '0' # NOTE: The order of parameters which passed to callback procedure is
end # <extra_arg>, <extra_arg>, ... , <subst_arg>, <subst_arg>, ...
#
#def self._get_extra_args_tbl #def self._get_extra_args_tbl
# # return an array of convert procs # # return an array of convert procs
# [] # []
#end #end
def self.ret_val(val)
(val)? '1': '0'
end
end end
############################################### ###############################################
@ -257,7 +263,7 @@ class TkValidateCommand
else else
@id = install_cmd(proc{|*arg| @id = install_cmd(proc{|*arg|
ex_args = [] ex_args = []
extra_args_tbl.reverse_each{|conv| ex_args << conv.call(args.pop)} extra_args_tbl.reverse_each{|conv| ex_args << conv.call(arg.pop)}
klass.ret_val(cmd.call( klass.ret_val(cmd.call(
*(ex_args.concat(klass.scan_args(keys, arg))) *(ex_args.concat(klass.scan_args(keys, arg)))
)) ))
@ -272,9 +278,9 @@ class TkValidateCommand
else else
@id = install_cmd(proc{|*arg| @id = install_cmd(proc{|*arg|
ex_args = [] ex_args = []
extra_args_tbl.reverse_each{|conv| ex_args << conv.call(args.pop)} extra_args_tbl.reverse_each{|conv| ex_args << conv.call(arg.pop)}
klass.ret_val(cmd.call( klass.ret_val(cmd.call(
*(ex_args << klass.new(*klass.scan_args(keys,arg))) *(ex_args << klass.new(*klass.scan_args(keys, arg)))
)) ))
}) + ' ' + args }) + ' ' + args
end end

View file

@ -96,12 +96,45 @@ TkCore::INTERP.add_tk_procs('rb_var', 'args', <<-'EOL')
end end
end end
#
# default_value is available only when the variable is an assoc array.
#
def default_value(val=nil, &b)
if b
@def_default = :proc
@default_val = proc(&b)
else
@def_default = :val
@default_val = val
end
self
end
def default_value=(val)
@def_default = :val
@default_val = val
self
end
def default_proc(cmd = Proc.new)
@def_default = :proc
@default_val = cmd
self
end
def undef_default
@default_val = nil
@def_default = false
self
end
def initialize(val="") def initialize(val="")
# @id = Tk_VARIABLE_ID.join('') # @id = Tk_VARIABLE_ID.join('')
@id = Tk_VARIABLE_ID.join(TkCore::INTERP._ip_id_) @id = Tk_VARIABLE_ID.join(TkCore::INTERP._ip_id_)
Tk_VARIABLE_ID[1].succ! Tk_VARIABLE_ID[1].succ!
TkVar_ID_TBL[@id] = self TkVar_ID_TBL[@id] = self
@def_default = false
@default_val = nil
@trace_var = nil @trace_var = nil
@trace_elem = nil @trace_elem = nil
@trace_opts = nil @trace_opts = nil
@ -290,7 +323,19 @@ if USE_TCLs_SET_VARIABLE_FUNCTIONS
def [](*idxs) def [](*idxs)
index = idxs.collect{|idx| _get_eval_string(idx, true)}.join(',') index = idxs.collect{|idx| _get_eval_string(idx, true)}.join(',')
_fromUTF8(INTERP._get_global_var2(@id, index)) begin
_fromUTF8(INTERP._get_global_var2(@id, index))
rescue => e
case @def_default
when :proc
@default_val.call(self, *idxs)
when :val
@default_val
else
fail e
end
end
#_fromUTF8(INTERP._get_global_var2(@id, index))
#_fromUTF8(INTERP._get_global_var2(@id, _toUTF8(_get_eval_string(index)))) #_fromUTF8(INTERP._get_global_var2(@id, _toUTF8(_get_eval_string(index))))
#_fromUTF8(INTERP._get_global_var2(@id, _get_eval_string(index, true))) #_fromUTF8(INTERP._get_global_var2(@id, _get_eval_string(index, true)))
end end
@ -389,7 +434,19 @@ else
def [](*idxs) def [](*idxs)
index = idxs.collect{|idx| _get_eval_string(idx)}.join(',') index = idxs.collect{|idx| _get_eval_string(idx)}.join(',')
INTERP._eval(Kernel.format('global %s; set %s(%s)', @id, @id, index)) begin
INTERP._eval(Kernel.format('global %s; set %s(%s)', @id, @id, index))
rescue => e
case @def_default
when :proc
@default_val.call(self, *idxs)
when :val
@default_val
else
fail e
end
end
#INTERP._eval(Kernel.format('global %s; set %s(%s)', @id, @id, index))
#INTERP._eval(Kernel.format('global %s; set %s(%s)', #INTERP._eval(Kernel.format('global %s; set %s(%s)',
# @id, @id, _get_eval_string(index))) # @id, @id, _get_eval_string(index)))
#INTERP._eval(Kernel.format('set %s(%s)', @id, _get_eval_string(index))) #INTERP._eval(Kernel.format('set %s(%s)', @id, _get_eval_string(index)))

View file

@ -49,8 +49,14 @@ script may give you some hints about that.
Tcllib http://sf.net/projects/tcllib Tcllib http://sf.net/projects/tcllib
==> tcllib (partial support; Tklib part only) ==> tcllib (partial support; Tklib part only)
IWidgets http://sf.net/projects/incrTcl ==> iwidgets
BWidgets http://sf.net/projects/tcllib ==> bwidget BWidgets http://sf.net/projects/tcllib ==> bwidget
TkTable http://sf.net/projects/tktable ==> tktable
[ * see also <http://www.korus.hu/~fery/ruby/tktable.rb>
written by Ferenc Engard (ferenc@engard.hu) ]
vu http://tktable.sourceforge.net ==> vu vu http://tktable.sourceforge.net ==> vu
TkHTML http://www.hwaci.com/sw/tkhtml/index.html ==> tkHTML TkHTML http://www.hwaci.com/sw/tkhtml/index.html ==> tkHTML
@ -84,11 +90,6 @@ TkDND http://sourceforge.net/projects/tkdnd ==> tkDND
TclX http://sf.net/projects/tclx * may support Tk part only TclX http://sf.net/projects/tclx * may support Tk part only
IWidgets http://sf.net/projects/incrTcl
TkTable http://sf.net/projects/tktable
* see http://www.korus.hu/~fery/ruby/tktable.rb
winico http://tktable.sourceforge.net winico http://tktable.sourceforge.net

View file

@ -17,6 +17,8 @@ TkPackage.require('BWidget')
module Tk module Tk
module BWidget module BWidget
TkComm::TkExtlibAutoloadModule.unshift(self)
extend TkCore extend TkCore
LIBRARY = tk_call('set', '::BWIDGET::LIBRARY') LIBRARY = tk_call('set', '::BWIDGET::LIBRARY')

View file

@ -162,7 +162,7 @@ class Tk::BWidget::ListBox::Item
include TkTreatTagFont include TkTreatTagFont
ListItem_TBL = TkCore::INTERP.create_table ListItem_TBL = TkCore::INTERP.create_table
ListItem_ID = ['item:'.freeze, '00000'.taint].freeze ListItem_ID = ['bw:item'.freeze, '00000'.taint].freeze
TkCore::INTERP.init_ip_env{ ListItem_TBL.clear } TkCore::INTERP.init_ip_env{ ListItem_TBL.clear }

View file

@ -203,7 +203,7 @@ class Tk::BWidget::Tree::Node
include TkTreatTagFont include TkTreatTagFont
TreeNode_TBL = TkCore::INTERP.create_table TreeNode_TBL = TkCore::INTERP.create_table
TreeNode_ID = ['node:'.freeze, '00000'.taint].freeze TreeNode_ID = ['bw:node'.freeze, '00000'.taint].freeze
TkCore::INTERP.init_ip_env{ TreeNode_TBL.clear } TkCore::INTERP.init_ip_env{ TreeNode_TBL.clear }

View file

@ -47,6 +47,10 @@ module Tk
'::itk::' << self::WidgetClassName '::itk::' << self::WidgetClassName
end end
def __destroy_hook__
Tk::Itk::Component::ComponentID_TBL.delete(self.path)
end
#### [incr Tk] public methods #### [incr Tk] public methods
def component def component
simplelist(tk_send('component')) simplelist(tk_send('component'))
@ -129,7 +133,7 @@ module Tk
end end
ComponentID_TBL = TkCore::INTERP.create_table ComponentID_TBL = TkCore::INTERP.create_table
Itk_Component_ID = ['itk_component'.freeze, '00000'.taint].freeze Itk_Component_ID = ['itk:component'.freeze, '00000'.taint].freeze
TkCore::INTERP.init_ip_env{ ComponentID_TBL.clear } TkCore::INTERP.init_ip_env{ ComponentID_TBL.clear }

View file

@ -19,6 +19,8 @@ TkPackage.require('Iwidgets')
module Tk module Tk
module Iwidgets module Iwidgets
TkComm::TkExtlibAutoloadModule.unshift(self)
extend TkCore extend TkCore
def self.package_version def self.package_version
@ -55,11 +57,30 @@ module Tk
autoload :Labeledframe, 'tkextlib/iwidgets/labeledframe' autoload :Labeledframe, 'tkextlib/iwidgets/labeledframe'
autoload :Labeledwidget, 'tkextlib/iwidgets/labeledwidget' autoload :Labeledwidget, 'tkextlib/iwidgets/labeledwidget'
autoload :Mainwindow, 'tkextlib/iwidgets/mainwindow' autoload :Mainwindow, 'tkextlib/iwidgets/mainwindow'
autoload :Menubar, 'tkextlib/iwidgets/menubar'
autoload :Messagebox, 'tkextlib/iwidgets/messagebox' autoload :Messagebox, 'tkextlib/iwidgets/messagebox'
autoload :Messagedialog, 'tkextlib/iwidgets/messagedialog' autoload :Messagedialog, 'tkextlib/iwidgets/messagedialog'
autoload :Notebook, 'tkextlib/iwidgets/notebook'
autoload :Optionmenu, 'tkextlib/iwidgets/optionmenu'
autoload :Panedwindow, 'tkextlib/iwidgets/panedwindow'
autoload :Pushbutton, 'tkextlib/iwidgets/pushbutton'
autoload :Promptdialog, 'tkextlib/iwidgets/promptdialog'
autoload :Radiobox, 'tkextlib/iwidgets/radiobox' autoload :Radiobox, 'tkextlib/iwidgets/radiobox'
autoload :Scrolledcanvas, 'tkextlib/iwidgets/scrolledcanvas'
autoload :Scrolledframe, 'tkextlib/iwidgets/scrolledframe'
autoload :Scrolledhtml, 'tkextlib/iwidgets/scrolledhtml'
autoload :Scrolledlistbox, 'tkextlib/iwidgets/scrolledlistbox'
autoload :Scrolledtext, 'tkextlib/iwidgets/scrolledtext'
autoload :Scrolledwidget, 'tkextlib/iwidgets/scrolledwidget' autoload :Scrolledwidget, 'tkextlib/iwidgets/scrolledwidget'
autoload :Selectionbox, 'tkextlib/iwidgets/selectionbox'
autoload :Selectiondialog, 'tkextlib/iwidgets/selectiondialog'
autoload :Shell, 'tkextlib/iwidgets/shell' autoload :Shell, 'tkextlib/iwidgets/shell'
autoload :Spindate, 'tkextlib/iwidgets/spindate'
autoload :Spinint, 'tkextlib/iwidgets/spinint'
autoload :Spinner, 'tkextlib/iwidgets/spinner'
autoload :Spintime, 'tkextlib/iwidgets/spintime'
autoload :Tabnotebook, 'tkextlib/iwidgets/tabnotebook'
autoload :Tabset, 'tkextlib/iwidgets/tabset'
autoload :Timeentry, 'tkextlib/iwidgets/timeentry' autoload :Timeentry, 'tkextlib/iwidgets/timeentry'
autoload :Timefield, 'tkextlib/iwidgets/timefield' autoload :Timefield, 'tkextlib/iwidgets/timefield'
autoload :Toolbar, 'tkextlib/iwidgets/toolbar' autoload :Toolbar, 'tkextlib/iwidgets/toolbar'

View file

@ -56,7 +56,9 @@ class Tk::Iwidgets::Buttonbox
keys = tag keys = tag
tag = nil tag = nil
end end
unless tag if tag
tag = Tk::Itk::Component.new(self, tagid(tag))
else
tag = Tk::Itk::Component.new(self) tag = Tk::Itk::Component.new(self)
end end
tk_call(@path, 'add', tagid(tag), *hash_kv(keys)) tk_call(@path, 'add', tagid(tag), *hash_kv(keys))
@ -87,7 +89,9 @@ class Tk::Iwidgets::Buttonbox
keys = tag keys = tag
tag = nil tag = nil
end end
unless tag if tag
tag = Tk::Itk::Component.new(self, tagid(tag))
else
tag = Tk::Itk::Component.new(self) tag = Tk::Itk::Component.new(self)
end end
tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys)) tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys))

View file

@ -56,7 +56,9 @@ class Tk::Iwidgets::Checkbox
keys = tag keys = tag
tag = nil tag = nil
end end
unless tag if tag
tag = Tk::Itk::Component.new(self, tagid(tag))
else
tag = Tk::Itk::Component.new(self) tag = Tk::Itk::Component.new(self)
end end
tk_call(@path, 'add', tagid(tag), *hash_kv(keys)) tk_call(@path, 'add', tagid(tag), *hash_kv(keys))
@ -93,7 +95,9 @@ class Tk::Iwidgets::Checkbox
keys = tag keys = tag
tag = nil tag = nil
end end
unless tag if tag
tag = Tk::Itk::Component.new(self, tagid(tag))
else
tag = Tk::Itk::Component.new(self) tag = Tk::Itk::Component.new(self)
end end
tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys)) tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys))

View file

@ -56,7 +56,9 @@ class Tk::Iwidgets::Dialogshell
keys = tag keys = tag
tag = nil tag = nil
end end
unless tag if tag
tag = Tk::Itk::Component.new(self, tagid(tag))
else
tag = Tk::Itk::Component.new(self) tag = Tk::Itk::Component.new(self)
end end
tk_call(@path, 'add', tagid(tag), *hash_kv(keys)) tk_call(@path, 'add', tagid(tag), *hash_kv(keys))
@ -87,7 +89,9 @@ class Tk::Iwidgets::Dialogshell
keys = tag keys = tag
tag = nil tag = nil
end end
unless tag if tag
tag = Tk::Itk::Component.new(self, tagid(tag))
else
tag = Tk::Itk::Component.new(self) tag = Tk::Itk::Component.new(self)
end end
tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys)) tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys))

View file

@ -87,7 +87,13 @@ class Tk::Iwidgets::Entryfield
def value def value
_fromUTF8(tk_send_without_enc('get')) _fromUTF8(tk_send_without_enc('get'))
end end
def value= (val)
tk_send_without_enc('delete', 0, 'end')
tk_send_without_enc('insert', 0, _get_eval_enc_str(val))
val
end
alias get value alias get value
alias set value=
def cursor=(index) def cursor=(index)
tk_send_without_enc('icursor', index) tk_send_without_enc('icursor', index)

View file

@ -0,0 +1,190 @@
#
# tkextlib/iwidgets/menubar.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Menubar < Tk::Itk::Widget
end
end
end
class Tk::Iwidgets::Menubar
TkCommandNames = ['::iwidgets::menubar'.freeze].freeze
WidgetClassName = 'Menubar'.freeze
WidgetClassNames[WidgetClassName] = self
####################################
include TkItemConfigMethod
def __item_cget_cmd(id)
[self.path, 'menucget', id]
end
private :__item_cget_cmd
def __item_config_cmd(id)
[self.path, 'menuconfigure', id]
end
private :__item_config_cmd
def tagid(tagOrId)
if tagOrId.kind_of?(Tk::Itk::Component)
tagOrId.name
else
#_get_eval_string(tagOrId)
tagOrId
end
end
alias menucget itemcget
alias menuconfigure itemconfigure
alias menuconfiginfo itemconfiginfo
alias current_menuconfiginfo current_itemconfiginfo
private :itemcget, :itemconfigure
private :itemconfiginfo, :current_itemconfiginfo
####################################
def __methodcall_optkeys
{'menubuttons'=>'menubuttons'}
end
def menubuttons(val = nil)
unless val
return tk_call(@path, 'cget', '-menubuttons')
end
tk_call(@path, 'configure', '-menubuttons', _parse_menu_spec(val))
self
end
def _parse_menu_spec(menu_spec)
ret = ''
menu_spec.each{|spec|
next unless spec
if spec.kind_of?(Hash)
args = [spec]
type = 'options'
else
type, *args = spec
end
type = type.to_s
case type
when 'options'
keys = args[0]
ary = [type]
ary.concat(hash_kv(keys))
ret << array2tk_list(ary) << "\n"
when 'menubutton', 'cascade'
name, keys = args
if keys
ary = [type, name]
keys = _symbolkey2str(keys)
keys['menu'] = _parse_menu_spec(keys['menu']) if keys.key?('menu')
ary.concat(hash_kv(keys))
ret << array2tk_list(ary) << "\n"
else
ret << array2tk_list([type, name]) << "\n"
end
else
name, keys = args
if keys
ary = [type, name]
ary.concat(hash_kv(keys))
ret << array2tk_list(ary) << "\n"
else
ret << array2tk_list([type, name]) << "\n"
end
end
}
ret
end
####################################
def add(type, tag=nil, keys={})
if tag.kind_of?(Hash)
keys = tag
tag = nil
end
if tag
tag = Tk::Itk::Component.new(self, tagid(tag))
else
tag = Tk::Itk::Component.new(self)
end
keys = _symbolkey2str(keys)
keys['menu'] = _parse_menu_spec(keys['menu']) if keys.key?('menu')
tk_call(@path, 'add', type, tagid(tag), *hash_kv(keys))
tag
end
def delete(path1, path2=nil)
if path2
else
tk_call(@path, 'delete', index(idx))
end
self
end
def index(idx)
number(tk_call(@path, 'index', tagid(idx)))
end
def insert(idx, type, tag=nil, keys={})
if tag.kind_of?(Hash)
keys = tag
tag = nil
end
if tag
tag = Tk::Itk::Component.new(self, tagid(tag))
else
tag = Tk::Itk::Component.new(self)
end
keys = _symbolkey2str(keys)
keys['menu'] = _parse_menu_spec(keys['menu']) if keys.key?('menu')
tk_call(@path, 'insert', index(idx), type, tagid(tag), *hash_kv(keys))
tag
end
def invoke(idx)
tk_call(@path, 'invoke', index(idx))
self
end
def menupath(pat)
if (win = tk_call(@path, 'path', pat)) == '-1'
return nil
end
window(win)
end
def menupath_glob(pat)
if (win = tk_call(@path, 'path', '-glob', pat)) == '-1'
return nil
end
window(win)
end
def menupath_tclregexp(pat)
if (win = tk_call(@path, 'path', '-regexp', pat)) == '-1'
return nil
end
window(win)
end
def type(path)
tk_call(@path, 'type', path)
end
def yposition(path)
number(tk_call(@path, 'yposition', path))
end
end

View file

@ -41,10 +41,10 @@ class Tk::Iwidgets::Messagebox
end end
end end
alias type_cget itemcget alias typecget itemcget
alias type_configure itemconfigure alias typeconfigure itemconfigure
alias type_configinfo itemconfiginfo alias typeconfiginfo itemconfiginfo
alias current_type_configinfo current_itemconfiginfo alias current_typeconfiginfo current_itemconfiginfo
private :itemcget, :itemconfigure private :itemcget, :itemconfigure
private :itemconfiginfo, :current_itemconfiginfo private :itemconfiginfo, :current_itemconfiginfo

View file

@ -0,0 +1,163 @@
#
# tkextlib/iwidgets/notebook.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Notebook < Tk::Itk::Widget
end
end
end
class Tk::Iwidgets::Notebook
TkCommandNames = ['::iwidgets::notebook'.freeze].freeze
WidgetClassName = 'Notebook'.freeze
WidgetClassNames[WidgetClassName] = self
####################################
include TkItemConfigMethod
def __item_cget_cmd(id)
[self.path, 'tabcget', id]
end
private :__item_cget_cmd
def __item_config_cmd(id)
[self.path, 'tabconfigure', id]
end
private :__item_config_cmd
def tagid(tagOrId)
if tagOrId.kind_of?(Tk::Itk::Component)
tagOrId.name
else
#_get_eval_string(tagOrId)
tagOrId
end
end
alias pagecget itemcget
alias pageconfigure itemconfigure
alias pageconfiginfo itemconfiginfo
alias current_pageconfiginfo current_itemconfiginfo
private :itemcget, :itemconfigure
private :itemconfiginfo, :current_itemconfiginfo
####################################
def add(keys={})
window(tk_call(@path, 'add', *hash_kv(keys)))
end
def child_site_list
list(tk_call(@path, 'childsite'))
end
def child_site(idx)
if (new_idx = self.index(idx)) < 0
new_idx = tagid(idx)
end
window(tk_call(@path, 'childsite', new_idx))
end
def delete(idx1, idx2=nil)
if (new_idx1 = self.index(idx1)) < 0
new_idx1 = tagid(idx1)
end
if idx2
if (new_idx2 = self.index(idx2)) < 0
new_idx2 = tagid(idx2)
end
tk_call(@path, 'delete', new_idx1, new_idx2)
else
tk_call(@path, 'delete', new_idx1)
end
self
end
def index(idx)
number(tk_call(@path, 'index', tagid(idx)))
end
def insert(idx, keys={})
if (new_idx = self.index(idx)) < 0
new_idx = tagid(idx)
end
window(tk_call(@path, 'insert', new_idx, *hash_kv(keys)))
end
def next
tk_call(@path, 'next')
self
end
def prev
tk_call(@path, 'prev')
self
end
def select(idx)
if (new_idx = self.index(idx)) < 0
new_idx = tagid(idx)
end
tk_call(@path, 'select', new_idx)
self
end
def scrollcommand(cmd=Proc.new)
configure_cmd 'scrollcommand', cmd
self
end
alias xscrollcommand scrollcommand
alias yscrollcommand scrollcommand
def xscrollbar(bar=nil)
if bar
@scrollbar = bar
@scrollbar.orient 'horizontal'
self.scrollcommand {|*arg| @scrollbar.set(*arg)}
@scrollbar.command {|*arg| self.xview(*arg)}
Tk.update # avoid scrollbar trouble
end
@scrollbar
end
def yscrollbar(bar=nil)
if bar
@scrollbar = bar
@scrollbar.orient 'vertical'
self.scrollcommand {|*arg| @scrollbar.set(*arg)}
@scrollbar.command {|*arg| self.yview(*arg)}
Tk.update # avoid scrollbar trouble
end
@scrollbar
end
alias scrollbar yscrollbar
def view(*index)
if index.size == 0
window(tk_send_without_enc('view'))
else
tk_send_without_enc('view', *index)
self
end
end
alias xview view
alias yview view
def view_moveto(*index)
view('moveto', *index)
end
alias xview_moveto view_moveto
alias yview_moveto view_moveto
def view_scroll(*index)
view('scroll', *index)
end
alias xview_scroll view_scroll
alias yview_scroll view_scroll
end

View file

@ -0,0 +1,87 @@
#
# tkextlib/iwidgets/optionmenu.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Optionmenu < Tk::Iwidgets::Labeledwidget
end
end
end
class Tk::Iwidgets::Optionmenu
TkCommandNames = ['::iwidgets::optionmenu'.freeze].freeze
WidgetClassName = 'Optionmenu'.freeze
WidgetClassNames[WidgetClassName] = self
def delete(first, last=nil)
if last
tk_call(@path, 'delete', first, last)
else
tk_call(@path, 'delete', first)
end
self
end
def disable(idx)
tk_call(@path, 'disable', idx)
self
end
def enable(idx)
tk_call(@path, 'enable', idx)
self
end
def get(first=nil, last=nil)
if last
simplelist(tk_call(@path, 'get', first, last))
elsif first
tk_call(@path, 'get', first)
else
tk_call(@path, 'get')
end
end
def get_range(first, last)
get(first, last)
end
def get_selected
get()
end
def index(idx)
number(tk_call(@path, 'index', idx))
end
def insert(idx, *args)
tk_call(@path, 'insert', idx, *args)
self
end
def select(idx)
tk_call(@path, 'select', idx)
self
end
def sort(*params, &b)
# see 'lsort' man page about params
if b
tk_call(@path, 'sort', '-command', proc(&b), *params)
else
tk_call(@path, 'sort', *params)
end
self
end
def sort_ascending
tk_call(@path, 'sort', 'ascending')
self
end
def sort_descending
tk_call(@path, 'sort', 'descending')
self
end
end

View file

@ -0,0 +1,127 @@
#
# tkextlib/iwidgets/panedwindow.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Panedwindow < Tk::Itk::Widget
end
end
end
class Tk::Iwidgets::Panedwindow
TkCommandNames = ['::iwidgets::panedwindow'.freeze].freeze
WidgetClassName = 'Panedwindow'.freeze
WidgetClassNames[WidgetClassName] = self
####################################
include TkItemConfigMethod
def __item_cget_cmd(id)
[self.path, 'panecget', id]
end
private :__item_cget_cmd
def __item_config_cmd(id)
[self.path, 'paneconfigure', id]
end
private :__item_config_cmd
def tagid(tagOrId)
if tagOrId.kind_of?(Tk::Itk::Component)
tagOrId.name
else
#_get_eval_string(tagOrId)
tagOrId
end
end
alias panecget itemcget
alias paneconfigure itemconfigure
alias paneconfiginfo itemconfiginfo
alias current_paneconfiginfo current_itemconfiginfo
private :itemcget, :itemconfigure
private :itemconfiginfo, :current_itemconfiginfo
####################################
def add(tag=nil, keys={})
if tag.kind_of?(Hash)
keys = tag
tag = nil
end
if tag
tag = Tk::Itk::Component.new(self, tagid(tag))
else
tag = Tk::Itk::Component.new(self)
end
window(tk_call(@path, 'add', tagid(tag), *hash_kv(keys)))
tag
end
def child_site_list
list(tk_call(@path, 'childsite'))
end
def child_site(idx)
window(tk_call(@path, 'childsite', index(idx)))
end
def delete(idx)
tk_call(@path, 'delete', index(idx))
self
end
def fraction(*percentages)
tk_call(@path, 'fraction', *percentages)
self
end
def hide(idx)
tk_call(@path, 'hide', index(idx))
self
end
def index(idx)
number(tk_call(@path, 'index', tagid(idx)))
end
def insert(idx, tag=nil, keys={})
if tag.kind_of?(Hash)
keys = tag
tag = nil
end
if tag
tag = Tk::Itk::Component.new(self, tagid(tag))
else
tag = Tk::Itk::Component.new(self)
end
window(tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys)))
tag
end
def invoke(idx=nil)
if idx
tk_call(@path, 'invoke', index(idx))
else
tk_call(@path, 'invoke')
end
self
end
def reset
tk_call(@path, 'reset')
self
end
def show(idx)
tk_call(@path, 'show', index(idx))
self
end
end

View file

@ -0,0 +1,131 @@
#
# tkextlib/iwidgets/promptdialog.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Promptdialog < Tk::Iwidgets::Dialog
end
end
end
class Tk::Iwidgets::Promptdialog
TkCommandNames = ['::iwidgets::promptdialog'.freeze].freeze
WidgetClassName = 'Promptdialog'.freeze
WidgetClassNames[WidgetClassName] = self
# index method is not available, because it shows index of the entry field
def default(name)
tk_call(@path, 'default', tagid(name))
self
end
def hide(name)
tk_call(@path, 'hide', tagid(name))
self
end
def invoke(name=nil)
if name
tk_call(@path, 'invoke', tagid(name))
else
tk_call(@path, 'invoke')
end
self
end
def show(name)
tk_call(@path, 'show', tagid(name))
self
end
# based on Tk::Iwidgets::Entryfield
def clear
tk_call(@path, 'clear')
self
end
def delete(first, last=None)
tk_send_without_enc('delete', first, last)
self
end
def value
_fromUTF8(tk_send_without_enc('get'))
end
def value= (val)
tk_send_without_enc('delete', 0, 'end')
tk_send_without_enc('insert', 0, _get_eval_enc_str(val))
val
end
alias get value
alias set value=
def cursor=(index)
tk_send_without_enc('icursor', index)
#self
index
end
alias icursor cursor=
def index(index)
number(tk_send_without_enc('index', index))
end
def insert(pos,text)
tk_send_without_enc('insert', pos, _get_eval_enc_str(text))
self
end
def mark(pos)
tk_send_without_enc('scan', 'mark', pos)
self
end
def dragto(pos)
tk_send_without_enc('scan', 'dragto', pos)
self
end
def selection_adjust(index)
tk_send_without_enc('selection', 'adjust', index)
self
end
def selection_clear
tk_send_without_enc('selection', 'clear')
self
end
def selection_from(index)
tk_send_without_enc('selection', 'from', index)
self
end
def selection_present()
bool(tk_send_without_enc('selection', 'present'))
end
def selection_range(s, e)
tk_send_without_enc('selection', 'range', s, e)
self
end
def selection_to(index)
tk_send_without_enc('selection', 'to', index)
self
end
def xview(*index)
if index.size == 0
list(tk_send_without_enc('xview'))
else
tk_send_without_enc('xview', *index)
self
end
end
def xview_moveto(*index)
xview('moveto', *index)
end
def xview_scroll(*index)
xview('scroll', *index)
end
end

View file

@ -0,0 +1,30 @@
#
# tkextlib/iwidgets/pushbutton.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Pushbutton < Tk::Itk::Widget
end
end
end
class Tk::Iwidgets::Pushbutton
TkCommandNames = ['::iwidgets::pushbutton'.freeze].freeze
WidgetClassName = 'Pushbutton'.freeze
WidgetClassNames[WidgetClassName] = self
def invoke
tk_call_without_enc(@path, 'invoke')
self
end
def flash
tk_call_without_enc(@path, 'flash')
self
end
end

View file

@ -56,7 +56,9 @@ class Tk::Iwidgets::Radiobox
keys = tag keys = tag
tag = nil tag = nil
end end
unless tag if tag
tag = Tk::Itk::Component.new(self, tagid(tag))
else
tag = Tk::Itk::Component.new(self) tag = Tk::Itk::Component.new(self)
end end
tk_call(@path, 'add', tagid(tag), *hash_kv(keys)) tk_call(@path, 'add', tagid(tag), *hash_kv(keys))
@ -93,7 +95,9 @@ class Tk::Iwidgets::Radiobox
keys = tag keys = tag
tag = nil tag = nil
end end
unless tag if tag
tag = Tk::Itk::Component.new(self, tagid(tag))
else
tag = Tk::Itk::Component.new(self) tag = Tk::Itk::Component.new(self)
end end
tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys)) tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys))

View file

@ -0,0 +1,24 @@
#
# tkextlib/iwidgets/buttonbox.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Scopedobject < TkObject
end
end
end
class Tk::Iwidgets::Scopedobject
TkCommandNames = ['::iwidgets::scopedobject'.freeze].freeze
WidgetClassName = 'Scopedobject'.freeze
WidgetClassNames[WidgetClassName] = self
def initialize(obj_name, keys={})
@path = tk_call(self.class::TkCommandNames[0], obj_name, *hash_kv(keys))
end
end

View file

@ -0,0 +1,315 @@
#
# tkextlib/iwidgets/scrolledcanvas.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tk/canvas'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Scrolledcanvas < Tk::Iwidgets::Scrolledwidget
end
end
end
class Tk::Iwidgets::Scrolledcanvas
TkCommandNames = ['::iwidgets::scrolledcanvas'.freeze].freeze
WidgetClassName = 'Scrolledcanvas'.freeze
WidgetClassNames[WidgetClassName] = self
################################
def initialize(*args)
super(*args)
@canvas = component_widget('canvas')
end
def method_missing(id, *args)
if @canvas.methods.include?(id.id2name)
@canvas.__send__(id, *args)
else
super(id, *args)
end
end
################################
def child_site
window(tk_call(@path, 'childsite'))
end
def justify(dir)
tk_call(@path, 'justify', dir)
self
end
##########################
include TkCanvasItemConfig
def tagid(tag)
if tag.kind_of?(TkcItem) || tag.kind_of?(TkcTag)
tag.id
elsif tag.kind_of?(Tk::Itk::Component)
tag.name
else
tag # maybe an Array of configure paramters
end
end
private :tagid
# create a canvas item without creating a TkcItem object
def create(type, *args)
type.create(self, *args)
end
#######################
def addtag(tag, mode, *args)
tk_send_without_enc('addtag', tagid(tag), mode, *args)
self
end
def addtag_above(tagOrId, target)
addtag(tagOrId, 'above', tagid(target))
end
def addtag_all(tagOrId)
addtag(tagOrId, 'all')
end
def addtag_below(tagOrId, target)
addtag(tagOrId, 'below', tagid(target))
end
def addtag_closest(tagOrId, x, y, halo=None, start=None)
addtag(tagOrId, 'closest', x, y, halo, start)
end
def addtag_enclosed(tagOrId, x1, y1, x2, y2)
addtag(tagOrId, 'enclosed', x1, y1, x2, y2)
end
def addtag_overlapping(tagOrId, x1, y1, x2, y2)
addtag(tagOrId, 'overlapping', x1, y1, x2, y2)
end
def addtag_withtag(tagOrId, tag)
addtag(tagOrId, 'withtag', tagid(tag))
end
def bbox(tagOrId, *tags)
list(tk_send_without_enc('bbox', tagid(tagOrId),
*tags.collect{|t| tagid(t)}))
end
def itembind(tag, context, cmd=Proc.new, args=nil)
_bind([path, "bind", tagid(tag)], context, cmd, args)
self
end
def itembind_append(tag, context, cmd=Proc.new, args=nil)
_bind_append([path, "bind", tagid(tag)], context, cmd, args)
self
end
def itembind_remove(tag, context)
_bind_remove([path, "bind", tagid(tag)], context)
self
end
def itembindinfo(tag, context=nil)
_bindinfo([path, "bind", tagid(tag)], context)
end
def canvasx(screen_x, *args)
#tk_tcl2ruby(tk_send_without_enc('canvasx', screen_x, *args))
number(tk_send_without_enc('canvasx', screen_x, *args))
end
def canvasy(screen_y, *args)
#tk_tcl2ruby(tk_send_without_enc('canvasy', screen_y, *args))
number(tk_send_without_enc('canvasy', screen_y, *args))
end
def coords(tag, *args)
if args == []
tk_split_list(tk_send_without_enc('coords', tagid(tag)))
else
tk_send_without_enc('coords', tagid(tag), *(args.flatten))
self
end
end
def dchars(tag, first, last=None)
tk_send_without_enc('dchars', tagid(tag),
_get_eval_enc_str(first), _get_eval_enc_str(last))
self
end
def delete(*args)
if TkcItem::CItemID_TBL[self.path]
find('withtag', *args).each{|item|
TkcItem::CItemID_TBL[self.path].delete(item.id)
}
end
tk_send_without_enc('delete', *args.collect{|t| tagid(t)})
self
end
alias remove delete
def dtag(tag, tag_to_del=None)
tk_send_without_enc('dtag', tagid(tag), tag_to_del)
self
end
def find(mode, *args)
list(tk_send_without_enc('find', mode, *args)).collect!{|id|
TkcItem.id2obj(self, id)
}
end
def find_above(target)
find('above', tagid(target))
end
def find_all
find('all')
end
def find_below(target)
find('below', tagid(target))
end
def find_closest(x, y, halo=None, start=None)
find('closest', x, y, halo, start)
end
def find_enclosed(x1, y1, x2, y2)
find('enclosed', x1, y1, x2, y2)
end
def find_overlapping(x1, y1, x2, y2)
find('overlapping', x1, y1, x2, y2)
end
def find_withtag(tag)
find('withtag', tag)
end
def itemfocus(tagOrId=nil)
if tagOrId
tk_send_without_enc('focus', tagid(tagOrId))
self
else
ret = tk_send_without_enc('focus')
if ret == ""
nil
else
TkcItem.id2obj(self, ret)
end
end
end
def gettags(tagOrId)
list(tk_send_without_enc('gettags', tagid(tagOrId))).collect{|tag|
TkcTag.id2obj(self, tag)
}
end
def icursor(tagOrId, index)
tk_send_without_enc('icursor', tagid(tagOrId), index)
self
end
def index(tagOrId, index)
number(tk_send_without_enc('index', tagid(tagOrId), index))
end
def insert(tagOrId, index, string)
tk_send_without_enc('insert', tagid(tagOrId), index,
_get_eval_enc_str(string))
self
end
def lower(tag, below=nil)
if below
tk_send_without_enc('lower', tagid(tag), tagid(below))
else
tk_send_without_enc('lower', tagid(tag))
end
self
end
def move(tag, x, y)
tk_send_without_enc('move', tagid(tag), x, y)
self
end
def postscript(keys)
tk_send("postscript", *hash_kv(keys))
end
def raise(tag, above=nil)
if above
tk_send_without_enc('raise', tagid(tag), tagid(above))
else
tk_send_without_enc('raise', tagid(tag))
end
self
end
def scale(tag, x, y, xs, ys)
tk_send_without_enc('scale', tagid(tag), x, y, xs, ys)
self
end
def scan_mark(x, y)
tk_send_without_enc('scan', 'mark', x, y)
self
end
def scan_dragto(x, y)
tk_send_without_enc('scan', 'dragto', x, y)
self
end
def select(mode, *args)
r = tk_send_without_enc('select', mode, *args)
(mode == 'item')? TkcItem.id2obj(self, r): self
end
def select_adjust(tagOrId, index)
select('adjust', tagid(tagOrId), index)
end
def select_clear
select('clear')
end
def select_from(tagOrId, index)
select('from', tagid(tagOrId), index)
end
def select_item
select('item')
end
def select_to(tagOrId, index)
select('to', tagid(tagOrId), index)
end
def itemtype(tag)
TkcItem.type2class(tk_send('type', tagid(tag)))
end
def xview(*index)
if index.size == 0
list(tk_send_without_enc('xview'))
else
tk_send_without_enc('xview', *index)
self
end
end
def xview_moveto(*index)
xview('moveto', *index)
end
def xview_scroll(*index)
xview('scroll', *index)
end
def yview(*index)
if index.size == 0
list(tk_send_without_enc('yview'))
else
tk_send_without_enc('yview', *index)
self
end
end
def yview_moveto(*index)
yview('moveto', *index)
end
def yview_scroll(*index)
yview('scroll', *index)
end
end

View file

@ -0,0 +1,59 @@
#
# tkextlib/iwidgets/scrolledframe.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Scrolledframe < Tk::Iwidgets::Scrolledwidget
end
end
end
class Tk::Iwidgets::Scrolledframe
TkCommandNames = ['::iwidgets::scrolledframe'.freeze].freeze
WidgetClassName = 'Scrolledframe'.freeze
WidgetClassNames[WidgetClassName] = self
def child_site
window(tk_call(@path, 'childsite'))
end
def justify(dir)
tk_call(@path, 'justify', dir)
self
end
def xview(*index)
if index.size == 0
list(tk_send_without_enc('xview'))
else
tk_send_without_enc('xview', *index)
self
end
end
def xview_moveto(*index)
xview('moveto', *index)
end
def xview_scroll(*index)
xview('scroll', *index)
end
def yview(*index)
if index.size == 0
list(tk_send_without_enc('yview'))
else
tk_send_without_enc('yview', *index)
self
end
end
def yview_moveto(*index)
yview('moveto', *index)
end
def yview_scroll(*index)
yview('scroll', *index)
end
end

View file

@ -0,0 +1,43 @@
#
# tkextlib/iwidgets/scrolledhtml.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Scrolledhtml < Tk::Iwidgets::Scrolledtext
end
end
end
class Tk::Iwidgets::Scrolledhtml
TkCommandNames = ['::iwidgets::scrolledhtml'.freeze].freeze
WidgetClassName = 'Scrolledhtml'.freeze
WidgetClassNames[WidgetClassName] = self
def import(href)
tk_call(@path, 'import', href)
self
end
def import_link(href)
tk_call(@path, 'import', '-link', href)
self
end
def pwd
tk_call(@path, 'pwd')
end
def render(htmltext, workdir=None)
tk_call(@path, 'render', htmltext, workdir)
self
end
def title
tk_call(@path, 'title')
end
end

View file

@ -0,0 +1,190 @@
#
# tkextlib/iwidgets/scrolledlistbox.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tk/listbox'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Scrolledlistbox < Tk::Iwidgets::Scrolledwidget
end
end
end
class Tk::Iwidgets::Scrolledlistbox
TkCommandNames = ['::iwidgets::scrolledlistbox'.freeze].freeze
WidgetClassName = 'Scrolledlistbox'.freeze
WidgetClassNames[WidgetClassName] = self
################################
def initialize(*args)
super(*args)
@listbox = component_widget('listbox')
end
def method_missing(id, *args)
if @listbox.methods.include?(id.id2name)
@listbox.__send__(id, *args)
else
super(id, *args)
end
end
################################
def clear
tk_call(@path, 'clear')
self
end
def get_curselection
tk_call(@path, 'getcurselection')
end
def justify(dir)
tk_call(@path, 'justify', dir)
self
end
def selected_item_count
number(tk_call(@path, 'selecteditemcount'))
end
def sort(*params, &b)
# see 'lsort' man page about params
if b
tk_call(@path, 'sort', '-command', proc(&b), *params)
else
tk_call(@path, 'sort', *params)
end
self
end
def sort_ascending
tk_call(@path, 'sort', 'ascending')
self
end
def sort_descending
tk_call(@path, 'sort', 'descending')
self
end
#####################################
def bbox(index)
list(tk_send_without_enc('bbox', index))
end
def delete(first, last=None)
tk_send_without_enc('delete', first, last)
self
end
def get(*index)
_fromUTF8(tk_send_without_enc('get', *index))
end
def insert(index, *args)
tk_send('insert', index, *args)
self
end
def scan_mark(x, y)
tk_send_without_enc('scan', 'mark', x, y)
self
end
def scan_dragto(x, y)
tk_send_without_enc('scan', 'dragto', x, y)
self
end
def see(index)
tk_send_without_enc('see', index)
self
end
#####################################
include TkListItemConfig
def tagid(tag)
if tag.kind_of?(Tk::Itk::Component)
tag.name
else
super(tag)
end
end
private :tagid
#####################################
def activate(y)
tk_send_without_enc('activate', y)
self
end
def curselection
list(tk_send_without_enc('curselection'))
end
def get(first, last=nil)
if last
tk_split_simplelist(_fromUTF8(tk_send_without_enc('get', first, last)))
else
_fromUTF8(tk_send_without_enc('get', first))
end
end
def nearest(y)
tk_send_without_enc('nearest', y).to_i
end
def size
tk_send_without_enc('size').to_i
end
def selection_anchor(index)
tk_send_without_enc('selection', 'anchor', index)
self
end
def selection_clear(first, last=None)
tk_send_without_enc('selection', 'clear', first, last)
self
end
def selection_includes(index)
bool(tk_send_without_enc('selection', 'includes', index))
end
def selection_set(first, last=None)
tk_send_without_enc('selection', 'set', first, last)
self
end
def index(index)
tk_send_without_enc('index', index).to_i
end
#####################################
def xview(*index)
if index.size == 0
list(tk_send_without_enc('xview'))
else
tk_send_without_enc('xview', *index)
self
end
end
def xview_moveto(*index)
xview('moveto', *index)
end
def xview_scroll(*index)
xview('scroll', *index)
end
def yview(*index)
if index.size == 0
list(tk_send_without_enc('yview'))
else
tk_send_without_enc('yview', *index)
self
end
end
def yview_moveto(*index)
yview('moveto', *index)
end
def yview_scroll(*index)
yview('scroll', *index)
end
end

View file

@ -0,0 +1,518 @@
#
# tkextlib/iwidgets/scrolledtext.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tk/text'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Scrolledtext < Tk::Iwidgets::Scrolledwidget
end
end
end
class Tk::Iwidgets::Scrolledtext
TkCommandNames = ['::iwidgets::scrolledtext'.freeze].freeze
WidgetClassName = 'Scrolledtext'.freeze
WidgetClassNames[WidgetClassName] = self
################################
def initialize(*args)
super(*args)
@text = component_widget('text')
end
def method_missing(id, *args)
if @text.methods.include?(id.id2name)
@text.__send__(id, *args)
else
super(id, *args)
end
end
################################
def child_site
window(tk_call(@path, 'childsite'))
end
def clear
tk_call(@path, 'clear')
self
end
def import(file, idx=nil)
if idx
tk_call(@path, 'import', file, index(idx))
else
tk_call(@path, 'import', file)
end
self
end
def export(file)
tk_call(@path, 'export', file)
self
end
#####################################
include TkTextTagConfig
def tagid(tag)
if tag.kind_of?(Tk::Itk::Component)
tag.name
else
super(tag)
end
end
private :tagid
def bbox(index)
list(tk_send('bbox', index))
end
def compare(idx1, op, idx2)
bool(tk_send_without_enc('compare', _get_eval_enc_str(idx1),
op, _get_eval_enc_str(idx2)))
end
def debug
bool(tk_send_without_enc('debug'))
end
def debug=(boolean)
tk_send_without_enc('debug', boolean)
#self
boolean
end
def delete(first, last=None)
tk_send_without_enc('delete', first, last)
self
end
def dlineinfo(index)
list(tk_send_without_enc('dlineinfo', _get_eval_enc_str(index)))
end
def get(*index)
_fromUTF8(tk_send_without_enc('get', *index))
end
def get_displaychars(*index)
# Tk8.5 feature
get('-displaychars', *index)
end
def image_cget(index, slot)
case slot.to_s
when 'text', 'label', 'show', 'data', 'file'
_fromUTF8(tk_send_without_enc('image', 'cget',
_get_eval_enc_str(index), "-#{slot}"))
else
tk_tcl2ruby(_fromUTF8(tk_send_without_enc('image', 'cget',
_get_eval_enc_str(index),
"-#{slot}")))
end
end
def image_configure(index, slot, value=None)
if slot.kind_of? Hash
_fromUTF8(tk_send_without_enc('image', 'configure',
_get_eval_enc_str(index),
*hash_kv(slot, true)))
else
_fromUTF8(tk_send_without_enc('image', 'configure',
_get_eval_enc_str(index),
"-#{slot}",
_get_eval_enc_str(value)))
end
self
end
def image_configinfo(index, slot = nil)
if TkComm::GET_CONFIGINFO_AS_ARRAY
if slot
case slot.to_s
when 'text', 'label', 'show', 'data', 'file'
conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}")))
else
conf = tk_split_list(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}")))
end
conf[0] = conf[0][1..-1]
conf
else
tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)))).collect{|conflist|
conf = tk_split_simplelist(conflist)
conf[0] = conf[0][1..-1]
case conf[0]
when 'text', 'label', 'show', 'data', 'file'
else
if conf[3]
if conf[3].index('{')
conf[3] = tk_split_list(conf[3])
else
conf[3] = tk_tcl2ruby(conf[3])
end
end
if conf[4]
if conf[4].index('{')
conf[4] = tk_split_list(conf[4])
else
conf[4] = tk_tcl2ruby(conf[4])
end
end
end
conf[1] = conf[1][1..-1] if conf.size == 2 # alias info
conf
}
end
else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
if slot
case slot.to_s
when 'text', 'label', 'show', 'data', 'file'
conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}")))
else
conf = tk_split_list(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}")))
end
key = conf.shift[1..-1]
{ key => conf }
else
ret = {}
tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)))).each{|conflist|
conf = tk_split_simplelist(conflist)
key = conf.shift[1..-1]
case key
when 'text', 'label', 'show', 'data', 'file'
else
if conf[2]
if conf[2].index('{')
conf[2] = tk_split_list(conf[2])
else
conf[2] = tk_tcl2ruby(conf[2])
end
end
if conf[3]
if conf[3].index('{')
conf[3] = tk_split_list(conf[3])
else
conf[3] = tk_tcl2ruby(conf[3])
end
end
end
if conf.size == 1
ret[key] = conf[0][1..-1] # alias info
else
ret[key] = conf
end
}
ret
end
end
end
def current_image_configinfo(index, slot = nil)
if TkComm::GET_CONFIGINFO_AS_ARRAY
if slot
conf = image_configinfo(index, slot)
{conf[0] => conf[4]}
else
ret = {}
image_configinfo(index).each{|conf|
ret[conf[0]] = conf[4] if conf.size > 2
}
ret
end
else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
ret = {}
image_configinfo(index, slot).each{|k, conf|
ret[k] = conf[-1] if conf.kind_of?(Array)
}
ret
end
end
def image_names
tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'names'))).collect{|elt|
tagid2obj(elt)
}
end
def index(index)
tk_send_without_enc('index', _get_eval_enc_str(index))
end
def insert(index, *args)
tk_send('insert', index, *args)
self
end
def mark_names
tk_split_simplelist(_fromUTF8(tk_send_without_enc('mark', 'names'))).collect{|elt|
tagid2obj(elt)
}
end
def mark_gravity(mark, direction=nil)
if direction
tk_send_without_enc('mark', 'gravity',
_get_eval_enc_str(mark), direction)
self
else
tk_send_without_enc('mark', 'gravity', _get_eval_enc_str(mark))
end
end
def mark_set(mark, index)
tk_send_without_enc('mark', 'set', _get_eval_enc_str(mark),
_get_eval_enc_str(index))
self
end
alias set_mark mark_set
def mark_unset(*marks)
tk_send_without_enc('mark', 'unset',
*(marks.collect{|mark| _get_eval_enc_str(mark)}))
self
end
alias unset_mark mark_unset
def mark_next(index)
tagid2obj(_fromUTF8(tk_send_without_enc('mark', 'next',
_get_eval_enc_str(index))))
end
alias next_mark mark_next
def mark_previous(index)
tagid2obj(_fromUTF8(tk_send_without_enc('mark', 'previous',
_get_eval_enc_str(index))))
end
alias previous_mark mark_previous
def scan_mark(x, y)
tk_send_without_enc('scan', 'mark', x, y)
self
end
def scan_dragto(x, y)
tk_send_without_enc('scan', 'dragto', x, y)
self
end
def _ktext_length(txt)
if $KCODE !~ /n/i
return txt.gsub(/[^\Wa-zA-Z_\d]/, ' ').length
end
# $KCODE == 'NONE'
if JAPANIZED_TK
tk_call_without_enc('kstring', 'length',
_get_eval_enc_str(txt)).to_i
else
begin
tk_call_without_enc('encoding', 'convertto', 'ascii',
_get_eval_enc_str(txt)).length
rescue StandardError, NameError
# sorry, I have no plan
txt.length
end
end
end
private :_ktext_length
def tksearch(*args)
# call 'search' subcommand of text widget
# args ::= [<array_of_opts>] <pattern> <start_index> [<stop_index>]
# If <pattern> is regexp, then it must be a regular expression of Tcl
if args[0].kind_of?(Array)
opts = args.shift.collect{|opt| '-' + opt.to_s }
else
opts = []
end
opts << '--'
ret = tk_send('search', *(opts + args))
if ret == ""
nil
else
ret
end
end
def tksearch_with_count(*args)
# call 'search' subcommand of text widget
# args ::= [<array_of_opts>] <var> <pattern> <start_index> [<stop_index>]
# If <pattern> is regexp, then it must be a regular expression of Tcl
if args[0].kind_of?(Array)
opts = args.shift.collect{|opt| '-' + opt.to_s }
else
opts = []
end
opts << '-count' << args.shift << '--'
ret = tk_send('search', *(opts + args))
if ret == ""
nil
else
ret
end
end
def search_with_length(pat,start,stop=None)
pat = pat.chr if pat.kind_of? Integer
if stop != None
return ["", 0] if compare(start,'>=',stop)
txt = get(start,stop)
if (pos = txt.index(pat))
match = $&
#pos = txt[0..(pos-1)].split('').length if pos > 0
pos = _ktext_length(txt[0..(pos-1)]) if pos > 0
if pat.kind_of? String
#return [index(start + " + #{pos} chars"), pat.split('').length]
return [index(start + " + #{pos} chars"),
_ktext_length(pat), pat.dup]
else
#return [index(start + " + #{pos} chars"), $&.split('').length]
return [index(start + " + #{pos} chars"),
_ktext_length(match), match]
end
else
return ["", 0]
end
else
txt = get(start,'end - 1 char')
if (pos = txt.index(pat))
match = $&
#pos = txt[0..(pos-1)].split('').length if pos > 0
pos = _ktext_length(txt[0..(pos-1)]) if pos > 0
if pat.kind_of? String
#return [index(start + " + #{pos} chars"), pat.split('').length]
return [index(start + " + #{pos} chars"),
_ktext_length(pat), pat.dup]
else
#return [index(start + " + #{pos} chars"), $&.split('').length]
return [index(start + " + #{pos} chars"),
_ktext_length(match), match]
end
else
txt = get('1.0','end - 1 char')
if (pos = txt.index(pat))
match = $&
#pos = txt[0..(pos-1)].split('').length if pos > 0
pos = _ktext_length(txt[0..(pos-1)]) if pos > 0
if pat.kind_of? String
#return [index("1.0 + #{pos} chars"), pat.split('').length]
return [index("1.0 + #{pos} chars"),
_ktext_length(pat), pat.dup]
else
#return [index("1.0 + #{pos} chars"), $&.split('').length]
return [index("1.0 + #{pos} chars"), _ktext_length(match), match]
end
else
return ["", 0]
end
end
end
end
def search(pat,start,stop=None)
search_with_length(pat,start,stop)[0]
end
def rsearch_with_length(pat,start,stop=None)
pat = pat.chr if pat.kind_of? Integer
if stop != None
return ["", 0] if compare(start,'<=',stop)
txt = get(stop,start)
if (pos = txt.rindex(pat))
match = $&
#pos = txt[0..(pos-1)].split('').length if pos > 0
pos = _ktext_length(txt[0..(pos-1)]) if pos > 0
if pat.kind_of? String
#return [index(stop + " + #{pos} chars"), pat.split('').length]
return [index(stop + " + #{pos} chars"), _ktext_length(pat), pat.dup]
else
#return [index(stop + " + #{pos} chars"), $&.split('').length]
return [index(stop + " + #{pos} chars"), _ktext_length(match), match]
end
else
return ["", 0]
end
else
txt = get('1.0',start)
if (pos = txt.rindex(pat))
match = $&
#pos = txt[0..(pos-1)].split('').length if pos > 0
pos = _ktext_length(txt[0..(pos-1)]) if pos > 0
if pat.kind_of? String
#return [index("1.0 + #{pos} chars"), pat.split('').length]
return [index("1.0 + #{pos} chars"), _ktext_length(pat), pat.dup]
else
#return [index("1.0 + #{pos} chars"), $&.split('').length]
return [index("1.0 + #{pos} chars"), _ktext_length(match), match]
end
else
txt = get('1.0','end - 1 char')
if (pos = txt.rindex(pat))
match = $&
#pos = txt[0..(pos-1)].split('').length if pos > 0
pos = _ktext_length(txt[0..(pos-1)]) if pos > 0
if pat.kind_of? String
#return [index("1.0 + #{pos} chars"), pat.split('').length]
return [index("1.0 + #{pos} chars"), _ktext_length(pat), pat.dup]
else
#return [index("1.0 + #{pos} chars"), $&.split('').length]
return [index("1.0 + #{pos} chars"), _ktext_length(match), match]
end
else
return ["", 0]
end
end
end
end
def rsearch(pat,start,stop=None)
rsearch_with_length(pat,start,stop)[0]
end
def see(index)
tk_send_without_enc('see', index)
self
end
###############################
def xview(*index)
if index.size == 0
list(tk_send_without_enc('xview'))
else
tk_send_without_enc('xview', *index)
self
end
end
def xview_moveto(*index)
xview('moveto', *index)
end
def xview_scroll(*index)
xview('scroll', *index)
end
def yview(*index)
if index.size == 0
list(tk_send_without_enc('yview'))
else
tk_send_without_enc('yview', *index)
self
end
end
def yview_moveto(*index)
yview('moveto', *index)
end
def yview_scroll(*index)
yview('scroll', *index)
end
end

View file

@ -0,0 +1,92 @@
#
# tkextlib/iwidgets/selectionbox.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Selectionbox < Tk::Itk::Widget
end
end
end
class Tk::Iwidgets::Selectionbox
TkCommandNames = ['::iwidgets::selectionbox'.freeze].freeze
WidgetClassName = 'Selectionbox'.freeze
WidgetClassNames[WidgetClassName] = self
def child_site
window(tk_call(@path, 'childsite'))
end
def clear_items
tk_call(@path, 'clear', 'items')
self
end
def clear_selection
tk_call(@path, 'clear', 'selection')
self
end
def get
tk_call(@path, 'get')
end
def insert_items(idx, *args)
tk_call(@path, 'insert', 'items', idx, *args)
end
def insert_selection(pos, text)
tk_call(@path, 'insert', 'selection', pos, text)
end
def select_item
tk_call(@path, 'selectitem')
self
end
# based on TkListbox ( and TkTextWin )
def curselection
list(tk_send_without_enc('curselection'))
end
def delete(first, last=None)
tk_send_without_enc('delete', first, last)
self
end
def index(index)
tk_send_without_enc('index', index).to_i
end
def nearest(y)
tk_send_without_enc('nearest', y).to_i
end
def scan_mark(x, y)
tk_send_without_enc('scan', 'mark', x, y)
self
end
def scan_dragto(x, y)
tk_send_without_enc('scan', 'dragto', x, y)
self
end
def selection_anchor(index)
tk_send_without_enc('selection', 'anchor', index)
self
end
def selection_clear(first, last=None)
tk_send_without_enc('selection', 'clear', first, last)
self
end
def selection_includes(index)
bool(tk_send_without_enc('selection', 'includes', index))
end
def selection_set(first, last=None)
tk_send_without_enc('selection', 'set', first, last)
self
end
def size
tk_send_without_enc('size').to_i
end
end

View file

@ -0,0 +1,92 @@
#
# tkextlib/iwidgets/selectiondialog.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Selectiondialog < Tk::Iwidgets::Dialog
end
end
end
class Tk::Iwidgets::Selectiondialog
TkCommandNames = ['::iwidgets::selectiondialog'.freeze].freeze
WidgetClassName = 'Selectiondialog'.freeze
WidgetClassNames[WidgetClassName] = self
def child_site
window(tk_call(@path, 'childsite'))
end
def clear_items
tk_call(@path, 'clear', 'items')
self
end
def clear_selection
tk_call(@path, 'clear', 'selection')
self
end
def get
tk_call(@path, 'get')
end
def insert_items(idx, *args)
tk_call(@path, 'insert', 'items', idx, *args)
end
def insert_selection(pos, text)
tk_call(@path, 'insert', 'selection', pos, text)
end
def select_item
tk_call(@path, 'selectitem')
self
end
# based on TkListbox ( and TkTextWin )
def curselection
list(tk_send_without_enc('curselection'))
end
def delete(first, last=None)
tk_send_without_enc('delete', first, last)
self
end
def index(index)
tk_send_without_enc('index', index).to_i
end
def nearest(y)
tk_send_without_enc('nearest', y).to_i
end
def scan_mark(x, y)
tk_send_without_enc('scan', 'mark', x, y)
self
end
def scan_dragto(x, y)
tk_send_without_enc('scan', 'dragto', x, y)
self
end
def selection_anchor(index)
tk_send_without_enc('selection', 'anchor', index)
self
end
def selection_clear(first, last=None)
tk_send_without_enc('selection', 'clear', first, last)
self
end
def selection_includes(index)
bool(tk_send_without_enc('selection', 'includes', index))
end
def selection_set(first, last=None)
tk_send_without_enc('selection', 'set', first, last)
self
end
def size
tk_send_without_enc('size').to_i
end
end

View file

@ -0,0 +1,38 @@
#
# tkextlib/iwidgets/spindate.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Spindate < Tk::Itk::Widget
end
end
end
class Tk::Iwidgets::Spindate
TkCommandNames = ['::iwidgets::spindate'.freeze].freeze
WidgetClassName = 'Spindate'.freeze
WidgetClassNames[WidgetClassName] = self
def get_string
tk_call(@path, 'get', '-string')
end
alias get get_string
def get_clicks
number(tk_call(@path, 'get', '-clicks'))
end
def show(date=None)
tk_call(@path, 'show', date)
self
end
def show_now
tk_call(@path, 'show', 'now')
self
end
end

View file

@ -0,0 +1,20 @@
#
# tkextlib/iwidgets/spinint.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Spinint < Tk::Iwidgets::Spinner
end
end
end
class Tk::Iwidgets::Spinint
TkCommandNames = ['::iwidgets::spinint'.freeze].freeze
WidgetClassName = 'Spinint'.freeze
WidgetClassNames[WidgetClassName] = self
end

View file

@ -0,0 +1,150 @@
#
# tkextlib/iwidgets/spinner.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Spinner < Tk::Iwidgets::Labeledwidget
end
end
end
class Tk::Iwidgets::Spinner
TkCommandNames = ['::iwidgets::spinner'.freeze].freeze
WidgetClassName = 'Spinner'.freeze
WidgetClassNames[WidgetClassName] = self
####################################
include Tk::ValidateConfigure
class EntryfieldValidate < TkValidateCommand
#class CalCmdArgs < TkUtil::CallbackSubst
class ValidateArgs < TkUtil::CallbackSubst
KEY_TBL = [
[ ?c, ?s, :char ],
[ ?P, ?s, :post ],
[ ?S, ?s, :current ],
[ ?W, ?w, :widget ],
nil
]
PROC_TBL = [
[ ?s, TkComm.method(:string) ],
[ ?w, TkComm.method(:window) ],
nil
]
_setup_subst_table(KEY_TBL, PROC_TBL);
end
def self._config_keys
['validate', 'invalid']
end
end
def __validation_class_list
super << EntryfieldValidate
end
Tk::ValidateConfigure.__def_validcmd(binding, EntryfieldValidate)
####################################
def up
tk_call_without_enc(@path, 'up')
self
end
def down
tk_call_without_enc(@path, 'down')
self
end
def clear
tk_call_without_enc(@path, 'clear')
self
end
def delete(first, last=None)
tk_send_without_enc('delete', first, last)
self
end
def value
_fromUTF8(tk_send_without_enc('get'))
end
def value= (val)
tk_send_without_enc('delete', 0, 'end')
tk_send_without_enc('insert', 0, _get_eval_enc_str(val))
val
end
alias get value
alias set value=
def cursor=(index)
tk_send_without_enc('icursor', index)
#self
index
end
alias icursor cursor=
def index(index)
number(tk_send_without_enc('index', index))
end
def insert(pos,text)
tk_send_without_enc('insert', pos, _get_eval_enc_str(text))
self
end
def mark(pos)
tk_send_without_enc('scan', 'mark', pos)
self
end
def dragto(pos)
tk_send_without_enc('scan', 'dragto', pos)
self
end
def selection_adjust(index)
tk_send_without_enc('selection', 'adjust', index)
self
end
def selection_clear
tk_send_without_enc('selection', 'clear')
self
end
def selection_from(index)
tk_send_without_enc('selection', 'from', index)
self
end
def selection_present()
bool(tk_send_without_enc('selection', 'present'))
end
def selection_range(s, e)
tk_send_without_enc('selection', 'range', s, e)
self
end
def selection_to(index)
tk_send_without_enc('selection', 'to', index)
self
end
# based on tk/scrollable.rb
def xview(*index)
if index.size == 0
list(tk_send_without_enc('xview'))
else
tk_send_without_enc('xview', *index)
self
end
end
def xview_moveto(*index)
xview('moveto', *index)
end
def xview_scroll(*index)
xview('scroll', *index)
end
end

View file

@ -0,0 +1,38 @@
#
# tkextlib/iwidgets/spintime.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Spintime < Tk::Itk::Widget
end
end
end
class Tk::Iwidgets::Spintime
TkCommandNames = ['::iwidgets::spintime'.freeze].freeze
WidgetClassName = 'Spintime'.freeze
WidgetClassNames[WidgetClassName] = self
def get_string
tk_call(@path, 'get', '-string')
end
alias get get_string
def get_clicks
number(tk_call(@path, 'get', '-clicks'))
end
def show(date=None)
tk_call(@path, 'show', date)
self
end
def show_now
tk_call(@path, 'show', 'now')
self
end
end

View file

@ -0,0 +1,154 @@
#
# tkextlib/iwidgets/tabnotebook.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Tabnotebook < Tk::Itk::Widget
end
end
end
class Tk::Iwidgets::Tabnotebook
TkCommandNames = ['::iwidgets::tabnotebook'.freeze].freeze
WidgetClassName = 'Tabnotebook'.freeze
WidgetClassNames[WidgetClassName] = self
####################################
include TkItemConfigMethod
def __item_cget_cmd(id)
[self.path, 'tabcget', id]
end
private :__item_cget_cmd
def __item_config_cmd(id)
[self.path, 'tabconfigure', id]
end
private :__item_config_cmd
def tagid(tagOrId)
if tagOrId.kind_of?(Tk::Itk::Component)
tagOrId.name
else
#_get_eval_string(tagOrId)
tagOrId
end
end
alias pagecget itemcget
alias pageconfigure itemconfigure
alias pageconfiginfo itemconfiginfo
alias current_pageconfiginfo current_itemconfiginfo
private :itemcget, :itemconfigure
private :itemconfiginfo, :current_itemconfiginfo
####################################
def initialize(*args)
super(*args)
@tabset = self.component_widget('tabset')
end
def add(keys={})
window(tk_call(@path, 'add', *hash_kv(keys)))
end
def child_site_list
list(tk_call(@path, 'childsite'))
end
def child_site(idx)
window(tk_call(@path, 'childsite', index(idx)))
end
def delete(idx1, idx2=nil)
if idx2
tk_call(@path, 'delete', index(idx1), index(idx2))
else
tk_call(@path, 'delete', index(idx1))
end
self
end
def index(idx)
#number(tk_call(@path, 'index', tagid(idx)))
@tabset.index(tagid(idx))
end
def insert(idx, keys={})
window(tk_call(@path, 'insert', index(idx), *hash_kv(keys)))
end
def next
tk_call(@path, 'next')
self
end
def prev
tk_call(@path, 'prev')
self
end
def select(idx)
tk_call(@path, 'select', index(idx))
self
end
def scrollcommand(cmd=Proc.new)
configure_cmd 'scrollcommand', cmd
self
end
alias xscrollcommand scrollcommand
alias yscrollcommand scrollcommand
def xscrollbar(bar=nil)
if bar
@scrollbar = bar
@scrollbar.orient 'horizontal'
self.scrollcommand {|*arg| @scrollbar.set(*arg)}
@scrollbar.command {|*arg| self.xview(*arg)}
Tk.update # avoid scrollbar trouble
end
@scrollbar
end
def yscrollbar(bar=nil)
if bar
@scrollbar = bar
@scrollbar.orient 'vertical'
self.scrollcommand {|*arg| @scrollbar.set(*arg)}
@scrollbar.command {|*arg| self.yview(*arg)}
Tk.update # avoid scrollbar trouble
end
@scrollbar
end
alias scrollbar yscrollbar
def view(*index)
if index.size == 0
window(tk_send_without_enc('view'))
else
tk_send_without_enc('view', *index)
self
end
end
alias xview view
alias yview view
def view_moveto(*index)
view('moveto', *index)
end
alias xview_moveto view_moveto
alias yview_moveto view_moveto
def view_scroll(*index)
view('scroll', *index)
end
alias xview_scroll view_scroll
alias yview_scroll view_scroll
end

View file

@ -0,0 +1,89 @@
#
# tkextlib/iwidgets/tabset.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/iwidgets.rb'
module Tk
module Iwidgets
class Tabset < Tk::Itk::Widget
end
end
end
class Tk::Iwidgets::Tabset
TkCommandNames = ['::iwidgets::tabset'.freeze].freeze
WidgetClassName = 'Tabset'.freeze
WidgetClassNames[WidgetClassName] = self
####################################
include TkItemConfigMethod
def __item_cget_cmd(id)
[self.path, 'tabcget', id]
end
private :__item_cget_cmd
def __item_config_cmd(id)
[self.path, 'tabconfigure', id]
end
private :__item_config_cmd
def tagid(tagOrId)
if tagOrId.kind_of?(Tk::Itk::Component)
tagOrId.name
else
#_get_eval_string(tagOrId)
tagOrId
end
end
alias tabcget itemcget
alias tabconfigure itemconfigure
alias tabconfiginfo itemconfiginfo
alias current_tabconfiginfo current_itemconfiginfo
private :itemcget, :itemconfigure
private :itemconfiginfo, :current_itemconfiginfo
####################################
def add(keys={})
window(tk_call(@path, 'add', *hash_kv(keys)))
end
def delete(idx1, idx2=nil)
if idx2
tk_call(@path, 'delete', index(idx1), index(idx2))
else
tk_call(@path, 'delete', index(idx1))
end
self
end
def index(idx)
number(tk_call(@path, 'index', tagid(idx)))
end
def insert(idx, keys={})
window(tk_call(@path, 'insert', index(idx), *hash_kv(keys)))
end
def next
tk_call(@path, 'next')
self
end
def prev
tk_call(@path, 'prev')
self
end
def select(idx)
tk_call(@path, 'select', index(idx))
self
end
end

View file

@ -22,6 +22,16 @@ class Tk::Iwidgets::Toolbar
include TkItemConfigMethod include TkItemConfigMethod
def __item_cget_cmd(id)
[self.path, 'itemcget', self.index(id)]
end
private :__item_cget_cmd
def __item_config_cmd(id)
[self.path, 'itemconfigure', self.index(id)]
end
private :__item_config_cmd
def tagid(tagOrId) def tagid(tagOrId)
if tagOrId.kind_of?(Tk::Itk::Component) if tagOrId.kind_of?(Tk::Itk::Component)
tagOrId.name tagOrId.name
@ -38,10 +48,12 @@ class Tk::Iwidgets::Toolbar
keys = tag keys = tag
tag = nil tag = nil
end end
unless tag if tag
tag = Tk::Itk::Component.new(self, tagid(tag))
else
tag = Tk::Itk::Component.new(self) tag = Tk::Itk::Component.new(self)
end end
tk_call(@path, 'add', type, tagid(tag), *hash_kv(keys)) window(tk_call(@path, 'add', type, tagid(tag), *hash_kv(keys)))
tag tag
end end
@ -63,24 +75,13 @@ class Tk::Iwidgets::Toolbar
keys = tag keys = tag
tag = nil tag = nil
end end
unless tag if tag
tag = Tk::Itk::Component.new(self, tagid(tag))
else
tag = Tk::Itk::Component.new(self) tag = Tk::Itk::Component.new(self)
end end
tk_call(@path, 'insert', index(idx), type, tagid(tag), *hash_kv(keys)) window(tk_call(@path, 'insert', index(idx), type,
tagid(tag), *hash_kv(keys)))
tag tag
end end
def invoke(idx=nil)
if idx
tk_call(@path, 'invoke', index(idx))
else
tk_call(@path, 'invoke')
end
self
end
def show(idx)
tk_call(@path, 'show', index(idx))
self
end
end end

View file

@ -29,7 +29,7 @@ rescue => e
err << "\n ['" << target << "'] " << e.class.name << ' : ' << e.message err << "\n ['" << target << "'] " << e.class.name << ' : ' << e.message
end end
# package:: style # package:: cursor
target = 'tkextlib/tcllib/style' target = 'tkextlib/tcllib/style'
begin begin
require target require target
@ -40,6 +40,8 @@ end
# autoload # autoload
module Tk module Tk
module Tcllib module Tcllib
TkComm::TkExtlibAutoloadModule.unshift(self)
# package:: ctext # package:: ctext
autoload :CText, 'tkextlib/tcllib/ctext' autoload :CText, 'tkextlib/tcllib/ctext'
@ -49,6 +51,7 @@ module Tk
# package:: ipentry # package:: ipentry
autoload :IP_Entry, 'tkextlib/tcllib/ip_entry' autoload :IP_Entry, 'tkextlib/tcllib/ip_entry'
autoload :IPEntry, 'tkextlib/tcllib/ip_entry'
# package:: Plotchart # package:: Plotchart
autoload :Plotchart, 'tkextlib/tcllib/plotchart' autoload :Plotchart, 'tkextlib/tcllib/plotchart'
@ -58,7 +61,6 @@ module Tk
end end
end end
unless err.empty? if $VERBOSE && !err.empty?
warn("Warning: some sub-packages are failed to require : " + err) warn("Warning: some sub-packages are failed to require : " + err)
end end

View file

@ -38,31 +38,40 @@ module Tk
'' ''
end end
end end
def self.not_available
fail RuntimeError, "'tkextlib/tcllib/autoscroll' extension is not available on your current environment."
end
def self.autoscroll(win)
Tk::Tcllib::Autoscroll.not_available
end
def self.unautoscroll(win)
Tk::Tcllib::Autoscroll.not_available
end
end end
end end
end end
# TkPackage.require('autoscroll', '1.0')
TkPackage.require('autoscroll')
module Tk module Tk
module Scrollable module Scrollable
def autoscroll(mode = nil) def autoscroll(mode = nil)
case mode case mode
when :x, 'x' when :x, 'x'
if @xscrollbar if @xscrollbar
tk_send_without_enc('::autoscroll::autoscroll', @xscrollbar) Tk::Tcllib::Autoscroll.autoscroll(@xscrollbar)
end end
when :y, 'y' when :y, 'y'
if @yscrollbar if @yscrollbar
tk_send_without_enc('::autoscroll::autoscroll', @yscrollbar) Tk::Tcllib::Autoscroll.autoscroll(@yscrollbar)
end end
when nil, :both, 'both' when nil, :both, 'both'
if @xscrollbar if @xscrollbar
tk_send_without_enc('::autoscroll::autoscroll', @xscrollbar) Tk::Tcllib::Autoscroll.autoscroll(@xscrollbar)
end end
if @yscrollbar if @yscrollbar
tk_send_without_enc('::autoscroll::autoscroll', @yscrollbar) Tk::Tcllib::Autoscroll.autoscroll(@yscrollbar)
end end
else else
fail ArgumentError, "'x', 'y' or 'both' (String or Symbol) is expected" fail ArgumentError, "'x', 'y' or 'both' (String or Symbol) is expected"
@ -73,18 +82,18 @@ module Tk
case mode case mode
when :x, 'x' when :x, 'x'
if @xscrollbar if @xscrollbar
tk_send_without_enc('::autoscroll::unautoscroll', @xscrollbar) Tk::Tcllib::Autoscroll.unautoscroll(@xscrollbar)
end end
when :y, 'y' when :y, 'y'
if @yscrollbar if @yscrollbar
tk_send_without_enc('::autoscroll::unautoscroll', @yscrollbar) Tk::Tcllib::Autoscroll.unautoscroll(@yscrollbar)
end end
when nil, :both, 'both' when nil, :both, 'both'
if @xscrollbar if @xscrollbar
tk_send_without_enc('::autoscroll::unautoscroll', @xscrollbar) Tk::Tcllib::Autoscroll.unautoscroll(@xscrollbar)
end end
if @yscrollbar if @yscrollbar
tk_send_without_enc('::autoscroll::unautoscroll', @yscrollbar) Tk::Tcllib::Autoscroll.unautoscroll(@yscrollbar)
end end
else else
fail ArgumentError, "'x', 'y' or 'both' (String or Symbol) is expected" fail ArgumentError, "'x', 'y' or 'both' (String or Symbol) is expected"
@ -98,12 +107,36 @@ class TkScrollbar
def autoscroll def autoscroll
# Arranges for the already existing scrollbar to be mapped # Arranges for the already existing scrollbar to be mapped
# and unmapped as needed. # and unmapped as needed.
tk_send_without_enc('::autoscroll::autoscroll', @path) #tk_call_without_enc('::autoscroll::autoscroll', @path)
Tk::Tcllib::Autoscroll.autoscroll(self)
self self
end end
def unautoscroll def unautoscroll
# Returns the scrollbar to its original static state. # Returns the scrollbar to its original static state.
tk_send_without_enc('::autoscroll::unautoscroll', @path) #tk_call_without_enc('::autoscroll::unautoscroll', @path)
Tk::Tcllib::Autoscroll.unautoscroll(self)
self self
end end
end end
# TkPackage.require('autoscroll', '1.0')
TkPackage.require('autoscroll')
module Tk
module Tcllib
class << Autoscroll
undef not_available
end
module Autoscroll
def self.autoscroll(win)
tk_call_without_enc('::autoscroll::autoscroll', win.path)
end
def self.unautoscroll(win)
tk_call_without_enc('::autoscroll::unautoscroll', win.path)
end
end
end
end

View file

@ -9,19 +9,32 @@
require 'tk' require 'tk'
require 'tkextlib/tcllib.rb' require 'tkextlib/tcllib.rb'
# TkPackage.require('cursor', '0.1')
TkPackage.require('cursor')
module Tk module Tk
module Tcllib module Tcllib
module Cursor module Cursor
def self.package_version def self.package_version
begin begin
TkPackage.require('ipentry') TkPackage.require('cursor')
rescue rescue
'' ''
end end
end end
def self.not_available
fail RuntimeError, "'tkextlib/tcllib/cursor' extension is not available on your current environment."
end
def self.cursor_display(win=None)
Tk::Tcllib::Cursor.not_available
end
def self.cursor_propagate(win, cursor)
Tk::Tcllib::Cursor.not_available
end
def self.cursor_restore(win, cursor = None)
Tk::Tcllib::Cursor.not_available
end
end end
end end
@ -29,20 +42,48 @@ module Tk
# Pops up a dialog with a listbox containing all the cursor names. # Pops up a dialog with a listbox containing all the cursor names.
# Selecting a cursor name will display it in that dialog. # Selecting a cursor name will display it in that dialog.
# This is simply for viewing any available cursors on the platform . # This is simply for viewing any available cursors on the platform .
tk_call_without_enc('::cursor::display', parent) #tk_call_without_enc('::cursor::display', parent)
Tk::Tcllib::Cursor.cursor_display(parent)
end end
end end
class TkWindow class TkWindow
def cursor_propagate(cursor) def cursor_propagate(cursor)
# Sets the cursor for self and all its descendants to cursor. # Sets the cursor for self and all its descendants to cursor.
tk_send_without_enc('::cursor::propagate', @path, cursor) #tk_call_without_enc('::cursor::propagate', @path, cursor)
Tk::Tcllib::Cursor.cursor_propagate(cursor)
end end
def cursor_restore(cursor = None) def cursor_restore(cursor = None)
# Restore the original or previously set cursor for self and all its # Restore the original or previously set cursor for self and all its
# descendants. If cursor is specified, that will be used if on any # descendants. If cursor is specified, that will be used if on any
# widget that did not have a preset cursor (set by a previous call # widget that did not have a preset cursor (set by a previous call
# to TkWindow#cursor_propagate). # to TkWindow#cursor_propagate).
tk_send_without_enc('::cursor::restore', @path, cursor) #tk_call_without_enc('::cursor::restore', @path, cursor)
Tk::Tcllib::Cursor.cursor_restore(cursor)
end
end
# TkPackage.require('cursor', '0.1')
TkPackage.require('cursor')
module Tk
module Tcllib
class << Cursor
undef not_available
end
module Cursor
def self.cursor_display(win=None)
tk_call_without_enc('::cursor::display', win)
end
def self.cursor_propagate(win, cursor)
tk_call_without_enc('::cursor::propagate', win.path, cursor)
end
def self.cursor_restore(win, cursor = None)
tk_call_without_enc('::cursor::restore', win.path, cursor)
end
end
end end
end end

View file

@ -27,6 +27,7 @@ module Tk
end end
end end
end end
IPEntry = IP_Entry
end end
end end

View file

@ -221,7 +221,10 @@ module Tk::Tcllib::Plotchart
class XYPlot < TkCanvas class XYPlot < TkCanvas
include ChartMethod include ChartMethod
TkCommandNames = ['::Plotchart::createXYPlot'.freeze].freeze TkCommandNames = [
'canvas'.freeze,
'::Plotchart::createXYPlot'.freeze
].freeze
def initialize(*args) # args := ([parent,] xaxis, yaxis [, keys]) def initialize(*args) # args := ([parent,] xaxis, yaxis [, keys])
# xaxis := Array of [minimum, maximum, stepsize] # xaxis := Array of [minimum, maximum, stepsize]
@ -248,12 +251,16 @@ module Tk::Tcllib::Plotchart
end end
def _create_chart def _create_chart
p self.class::TkCommandNames[0] if $DEBUG p self.class::TkCommandNames[1] if $DEBUG
tk_call_without_enc(self.class::TkCommandNames[0], @path, tk_call_without_enc(self.class::TkCommandNames[1], @path,
array2tk_list(@xaxis), array2tk_list(@yaxis)) array2tk_list(@xaxis), array2tk_list(@yaxis))
end end
private :_create_chart private :_create_chart
def __destroy_hook__
Tk::Tcllib::Plotchart::PlotSeries::SeriesID_TBL.delete(@path)
end
def plot(series, x, y) def plot(series, x, y)
tk_call_without_enc(@chart, 'plot', _get_eval_enc_str(series), x, y) tk_call_without_enc(@chart, 'plot', _get_eval_enc_str(series), x, y)
self self
@ -271,14 +278,20 @@ module Tk::Tcllib::Plotchart
############################ ############################
class Stripchart < XYPlot class Stripchart < XYPlot
TkCommandNames = ['::Plotchart::createStripchart'.freeze].freeze TkCommandNames = [
'canvas'.freeze,
'::Plotchart::createStripchart'.freeze
].freeze
end end
############################ ############################
class PolarPlot < TkCanvas class PolarPlot < TkCanvas
include ChartMethod include ChartMethod
TkCommandNames = ['::Plotchart::createPolarplot'.freeze].freeze TkCommandNames = [
'canvas'.freeze,
'::Plotchart::createPolarplot'.freeze
].freeze
def initialize(*args) # args := ([parent,] radius_data [, keys]) def initialize(*args) # args := ([parent,] radius_data [, keys])
# radius_data := Array of [maximum_radius, stepsize] # radius_data := Array of [maximum_radius, stepsize]
@ -302,12 +315,16 @@ module Tk::Tcllib::Plotchart
end end
def _create_chart def _create_chart
p self.class::TkCommandNames[0] if $DEBUG p self.class::TkCommandNames[1] if $DEBUG
tk_call_without_enc(self.class::TkCommandNames[0], @path, tk_call_without_enc(self.class::TkCommandNames[1], @path,
array2tk_list(@radius_data)) array2tk_list(@radius_data))
end end
private :_create_chart private :_create_chart
def __destroy_hook__
Tk::Tcllib::Plotchart::PlotSeries::SeriesID_TBL.delete(@path)
end
def plot(series, radius, angle) def plot(series, radius, angle)
tk_call_without_enc(@chart, 'plot', _get_eval_enc_str(series), tk_call_without_enc(@chart, 'plot', _get_eval_enc_str(series),
radius, angle) radius, angle)
@ -329,7 +346,10 @@ module Tk::Tcllib::Plotchart
class IsometricPlot < TkCanvas class IsometricPlot < TkCanvas
include ChartMethod include ChartMethod
TkCommandNames = ['::Plotchart::createIsometricPlot'.freeze].freeze TkCommandNames = [
'canvas'.freeze,
'::Plotchart::createIsometricPlot'.freeze
].freeze
def initialize(*args) # args := ([parent,] xaxis, yaxis, [, step] [, keys]) def initialize(*args) # args := ([parent,] xaxis, yaxis, [, step] [, keys])
# xaxis := Array of [minimum, maximum] # xaxis := Array of [minimum, maximum]
@ -369,8 +389,8 @@ module Tk::Tcllib::Plotchart
end end
def _create_chart def _create_chart
p self.class::TkCommandNames[0] if $DEBUG p self.class::TkCommandNames[1] if $DEBUG
tk_call_without_enc(self.class::TkCommandNames[0], @path, tk_call_without_enc(self.class::TkCommandNames[1], @path,
array2tk_list(@xaxis), array2tk_list(@yaxis), array2tk_list(@xaxis), array2tk_list(@yaxis),
@stepsize) @stepsize)
end end
@ -406,7 +426,10 @@ module Tk::Tcllib::Plotchart
class Plot3D < TkCanvas class Plot3D < TkCanvas
include ChartMethod include ChartMethod
TkCommandNames = ['::Plotchart::create3DPlot'.freeze].freeze TkCommandNames = [
'canvas'.freeze,
'::Plotchart::create3DPlot'.freeze
].freeze
def initialize(*args) # args := ([parent,] xaxis, yaxis, zaxis [, keys]) def initialize(*args) # args := ([parent,] xaxis, yaxis, zaxis [, keys])
# xaxis := Array of [minimum, maximum, stepsize] # xaxis := Array of [minimum, maximum, stepsize]
@ -436,8 +459,8 @@ module Tk::Tcllib::Plotchart
end end
def _create_chart def _create_chart
p self.class::TkCommandNames[0] if $DEBUG p self.class::TkCommandNames[1] if $DEBUG
tk_call_without_enc(self.class::TkCommandNames[0], @path, tk_call_without_enc(self.class::TkCommandNames[1], @path,
array2tk_list(@xaxis), array2tk_list(@xaxis),
array2tk_list(@yaxis), array2tk_list(@yaxis),
array2tk_list(@zaxis)) array2tk_list(@zaxis))
@ -478,7 +501,10 @@ module Tk::Tcllib::Plotchart
class Piechart < TkCanvas class Piechart < TkCanvas
include ChartMethod include ChartMethod
TkCommandNames = ['::Plotchart::createPiechart'.freeze].freeze TkCommandNames = [
'canvas'.freeze,
'::Plotchart::createPiechart'.freeze
].freeze
def initialize(*args) # args := ([parent] [, keys]) def initialize(*args) # args := ([parent] [, keys])
if args[0].kind_of?(TkCanvas) if args[0].kind_of?(TkCanvas)
@ -491,8 +517,8 @@ module Tk::Tcllib::Plotchart
end end
def _create_chart def _create_chart
p self.class::TkCommandNames[0] if $DEBUG p self.class::TkCommandNames[1] if $DEBUG
tk_call_without_enc(self.class::TkCommandNames[0], @path) tk_call_without_enc(self.class::TkCommandNames[1], @path)
end end
private :_create_chart private :_create_chart
@ -506,7 +532,10 @@ module Tk::Tcllib::Plotchart
class Barchart < TkCanvas class Barchart < TkCanvas
include ChartMethod include ChartMethod
TkCommandNames = ['::Plotchart::createBarchart'.freeze].freeze TkCommandNames = [
'canvas'.freeze,
'::Plotchart::createBarchart'.freeze
].freeze
def initialize(*args) def initialize(*args)
# args := ([parent,] xlabels, ylabels [, series] [, keys]) # args := ([parent,] xlabels, ylabels [, series] [, keys])
@ -549,13 +578,17 @@ module Tk::Tcllib::Plotchart
end end
def _create_chart def _create_chart
p self.class::TkCommandNames[0] if $DEBUG p self.class::TkCommandNames[1] if $DEBUG
tk_call_without_enc(self.class::TkCommandNames[0], @path, tk_call_without_enc(self.class::TkCommandNames[1], @path,
array2tk_list(@xlabels), array2tk_list(@ylabels), array2tk_list(@xlabels), array2tk_list(@ylabels),
@series_size) @series_size)
end end
private :_create_chart private :_create_chart
def __destroy_hook__
Tk::Tcllib::Plotchart::PlotSeries::SeriesID_TBL.delete(@path)
end
def plot(series, dat, col=None) def plot(series, dat, col=None)
tk_call_without_enc(@chart, 'plot', series, dat, col) tk_call_without_enc(@chart, 'plot', series, dat, col)
self self
@ -573,14 +606,20 @@ module Tk::Tcllib::Plotchart
############################ ############################
class HorizontalBarchart < Barchart class HorizontalBarchart < Barchart
TkCommandNames = ['::Plotchart::createHorizontalBarchart'.freeze].freeze TkCommandNames = [
'canvas'.freeze,
'::Plotchart::createHorizontalBarchart'.freeze
].freeze
end end
############################ ############################
class Timechart < TkCanvas class Timechart < TkCanvas
include ChartMethod include ChartMethod
TkCommandNames = ['::Plotchart::createTimechart'.freeze].freeze TkCommandNames = [
'canvas'.freeze,
'::Plotchart::createTimechart'.freeze
].freeze
def initialize(*args) def initialize(*args)
# args := ([parent,] time_begin, time_end, items [, keys]) # args := ([parent,] time_begin, time_end, items [, keys])
@ -612,8 +651,8 @@ module Tk::Tcllib::Plotchart
end end
def _create_chart def _create_chart
p self.class::TkCommandNames[0] if $DEBUG p self.class::TkCommandNames[1] if $DEBUG
tk_call_without_enc(self.class::TkCommandNames[0], @path, tk_call_without_enc(self.class::TkCommandNames[1], @path,
@time_begin, @time_end, @items) @time_begin, @time_end, @items)
end end
private :_create_chart private :_create_chart
@ -650,7 +689,7 @@ module Tk::Tcllib::Plotchart
@parent = @chart_obj = chart @parent = @chart_obj = chart
@ppath = @chart_obj.path @ppath = @chart_obj.path
@path = @series = @id = Series_ID.join(TkCore::INTERP._ip_id_) @path = @series = @id = Series_ID.join(TkCore::INTERP._ip_id_)
SeriesID_TBL[@id] = self # SeriesID_TBL[@id] = self
SeriesID_TBL[@ppath] = {} unless SeriesID_TBL[@ppath] SeriesID_TBL[@ppath] = {} unless SeriesID_TBL[@ppath]
SeriesID_TBL[@ppath][@id] = self SeriesID_TBL[@ppath][@id] = self
Series_ID[1].succ! Series_ID[1].succ!

View file

@ -9,10 +9,7 @@
require 'tk' require 'tk'
require 'tkextlib/tcllib.rb' require 'tkextlib/tcllib.rb'
# TkPackage.require('style', '0.1') module Tk::Tcllib
TkPackage.require('style')
module Tk
module Style module Style
def self.package_version def self.package_version
begin begin
@ -22,6 +19,29 @@ module Tk
end end
end end
def self.not_available
fail RuntimeError, "'tkextlib/tcllib/style' extension is not available on your current environment."
end
def self.names
Tk::Tcllib::Style.not_available
end
def self.use(style)
Tk::Tcllib::Style.not_available
end
end
end
# TkPackage.require('style', '0.1')
TkPackage.require('style')
module Tk::Tcllib
class << Style
undef not_available
end
module Style
def self.names def self.names
tk_split_simplelist(tk_call('style::names')) tk_split_simplelist(tk_call('style::names'))
end end

View file

@ -18,6 +18,8 @@ TkPackage.require('tile')
# autoload # autoload
module Tk module Tk
module Tile module Tile
TkComm::TkExtlibAutoloadModule.unshift(self)
def self.package_version def self.package_version
begin begin
TkPackage.require('tile') TkPackage.require('tile')

View file

@ -0,0 +1,14 @@
#
# TkTable support
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
# call setup script for general 'tkextlib' libraries
require 'tkextlib/setup.rb'
# call setup script
require 'tkextlib/tktable/setup.rb'
# load library
require 'tkextlib/tktable/tktable'

View file

@ -0,0 +1,8 @@
#
# setup.rb -- setup script before calling TkPackage.require()
#
# If you need some setup operations (for example, add a library path
# to the library search path) before using Tcl/Tk library packages
# wrapped by Ruby scripts in this directory, please write the setup
# operations in this file.
#

View file

@ -0,0 +1,796 @@
#
# tkextlib/tktable/tktable.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tk/validation'
# call setup script for general 'tkextlib' libraries
require 'tkextlib/setup.rb'
# call setup script
require 'tkextlib/tktable/setup.rb'
# TkPackage.require('Tktable', '2.8')
TkPackage.require('Tktable')
module Tk
class TkTable < TkWindow
def self.package_version
begin
TkPackage.require('Tktable')
rescue
''
end
end
class CellTag < TkObject
end
module ConfigMethod
end
end
end
module Tk::TkTable::ConfigMethod
include TkItemConfigMethod
def __item_cget_cmd(id) # id := [ type, tagOrId ]
[self.path, id[0], 'cget', id[1]]
end
private :__item_cget_cmd
def __item_config_cmd(id) # id := [ type, tagOrId ]
[self.path, id[0], 'configure', id[1]]
end
private :__item_config_cmd
def __item_pathname(id)
if id.kind_of?(Array)
id = tagid(id[1])
end
[self.path, id].join(';')
end
private :__item_pathname
def tag_cget(tagOrId, option)
itemcget(['tag', tagid(tagOrId)], option)
end
def tag_configure(tagOrId, slot, value=None)
itemconfigure(['tag', tagid(tagOrId)], slot, value)
end
def tag_configinfo(tagOrId, slot=nil)
itemconfigure(['tag', tagid(tagOrId)], slot)
end
def current_tag_configinfo(tagOrId, slot=nil)
itemconfigure(['tag', tagid(tagOrId)], slot)
end
def window_cget(tagOrId, option)
itemcget(['window', tagid(tagOrId)], option)
end
def window_configure(tagOrId, slot, value=None)
itemconfigure(['window', tagid(tagOrId)], slot, value)
end
def window_configinfo(tagOrId, slot=nil)
itemconfigure(['window', tagid(tagOrId)], slot)
end
def current_window_configinfo(tagOrId, slot=nil)
itemconfigure(['window', tagid(tagOrId)], slot)
end
private :itemcget, :itemconfigure
private :itemconfiginfo, :current_itemconfiginfo
end
#####################################################
class Tk::TkTable::CellTag
include TkTreatTagFont
CellTagID_TBL = TkCore::INTERP.create_table
CellTag_ID = ['tktbl:celltag'.freeze, '00000'.taint].freeze
TkCore::INTERP.init_ip_env{ CellTagID_TBL.clear }
def self.id2obj(table, id)
tpath = table.path
return id unless CellTagID_TBL[tpath]
CellTagID_TBL[tpath][id]? CellTagID_TBL[tpath][id] : id
end
def initialize(parent, keys=nil)
@parent = @t = parent
@tpath - parent.path
@path = @id = CellTag_ID.join(TkCore::INTERP._ip_id_)
CellTagID_TBL[@tpath] = {} unless CellTagID_TBL[@tpath]
CellTagID_TBL[@tpath][@id] = self
CellTag_ID[1].succ!
configure(keys) if keys
end
def id
@id
end
def destroy
tk_call(@tpath, 'tag', 'delete', @id)
CellTagID_TBL[@tpath].delete(@id) if CellTagID_TBL[@tpath]
self
end
alias delete destroy
def exist?
@t.tag_exist?(@id)
end
def include?(idx)
@t.tag_include?(@id, idx)
end
def add_cell(*args)
@t.tag_cell(@id, *args)
end
def add_col(*args)
@t.tag_col(@id, *args)
end
def add_row(*args)
@t.tag_row(@id, *args)
end
def raise(target=None)
@t.tag_raise(@id, target)
end
def lower(target=None)
@t.tag_lower(@id, target)
end
def cget(key)
@t.tag_cget(@id, key)
end
def configure(key, val=None)
@t.tag_configure(@id, key, val)
end
def configinfo(key=nil)
@t.tag_configinfo(@id, key)
end
def current_configinfo(key=nil)
@t.current_tag_configinfo(@id, key)
end
end
class Tk::TkTable::NamedCellTag < Tk::TkTable::CellTag
def self.new(parent, name, keys=nil)
if CellTagID_TBL[parent.path] && CellTagID_TBL[parent.path][name]
cell = CellTagID_TBL[parent.path][name]
cell.configure(keys) if keys
return cell
else
super(parent, name, keys)
end
end
def initialize(parent, name, keys=nil)
@parent = @t = parent
@tpath - parent.path
@path = @id = name
CellTagID_TBL[@tpath] = {} unless CellTagID_TBL[@tpath]
CellTagID_TBL[@tpath][@id] = self
configure(keys) if keys
end
end
#####################################################
class Tk::TkTable
TkCommandNames = ['table'.freeze].freeze
WidgetClassName = 'Table'.freeze
WidgetClassNames[WidgetClassName] = self
include Scrollable
include Tk::TkTable::ConfigMethod
include Tk::ValidateConfigure
def __destroy_hook__
Tk::TkTable::CelTag::CellTagID_TBL.delete(@path)
end
#################################
class BrowseCommand < TkValidateCommand
class ValidateArgs < TkUtil::CallbackSubst
KEY_TBL = [
[ ?c, ?n, :column ],
[ ?C, ?s, :index ],
[ ?i, ?x, :cursor ],
[ ?r, ?n, :row ],
[ ?s, ?s, :last_index ],
[ ?S, ?s, :new_index ],
[ ?W, ?w, :widget ],
nil
]
PROC_TBL = [
[ ?n, TkComm.method(:number) ],
[ ?x, TkComm.method(:num_or_str) ],
[ ?s, TkComm.method(:string) ],
[ ?w, TkComm.method(:window) ],
nil
]
_setup_subst_table(KEY_TBL, PROC_TBL);
def self.ret_val(val)
val
end
end
def self._config_keys
['browsecommand', 'browsecmd']
end
end
#--------------------------------
class CellCommand < TkValidateCommand
class ValidateArgs < TkUtil::CallbackSubst
KEY_TBL = [
[ ?c, ?n, :column ],
[ ?C, ?s, :index ],
[ ?i, ?m, :rw_mode ],
[ ?r, ?n, :row ],
[ ?s, ?v, :value ],
[ ?W, ?w, :widget ],
nil
]
PROC_TBL = [
[ ?n, TkComm.method(:number) ],
[ ?s, TkComm.method(:string) ],
[ ?w, TkComm.method(:window) ],
[ ?m, proc{|val| (val == '0')? (:r) : (:w)} ],
[ ?v, proc{|val| TkComm.tk_tcl2ruby(val, true, false)} ],
nil
]
_setup_subst_table(KEY_TBL, PROC_TBL);
def self.ret_val(val)
TkComm._get_eval_string(val)
end
end
def self._config_keys
['command']
end
end
#--------------------------------
class SelectionCommand < TkValidateCommand
class ValidateArgs < TkUtil::CallbackSubst
KEY_TBL = [
[ ?c, ?n, :sel_columns ],
[ ?C, ?s, :sel_area ],
[ ?i, ?n, :total ],
[ ?r, ?n, :sel_rows ],
[ ?s, ?s, :value ],
[ ?W, ?w, :widget ],
nil
]
PROC_TBL = [
[ ?n, TkComm.method(:number) ],
[ ?s, TkComm.method(:string) ],
[ ?w, TkComm.method(:window) ],
nil
]
_setup_subst_table(KEY_TBL, PROC_TBL);
def self.ret_val(val)
val.to_s
end
end
def self._config_keys
['selectioncommand', 'selcmd']
end
end
#--------------------------------
class ValidateCommand < TkValidateCommand
class ValidateArgs < TkUtil::CallbackSubst
KEY_TBL = [
[ ?c, ?n, :column ],
[ ?C, ?s, :index ],
[ ?i, ?x, :cursor ],
[ ?r, ?n, :row ],
[ ?s, ?v, :current_value ],
[ ?S, ?v, :new_value ],
[ ?W, ?w, :widget ],
nil
]
PROC_TBL = [
[ ?n, TkComm.method(:number) ],
[ ?x, TkComm.method(:num_or_str) ],
[ ?s, TkComm.method(:string) ],
[ ?w, TkComm.method(:window) ],
[ ?v, proc{|val| TkComm.tk_tcl2ruby(val, true, false)} ],
nil
]
_setup_subst_table(KEY_TBL, PROC_TBL);
end
def self._config_keys
['vcmd', 'validatecommand']
end
end
#################################
def __validation_class_list
super <<
BrowseCommand << CellCommand << SelectionCommand << ValidateCommand
end
Tk::ValidateConfigure.__def_validcmd(binding, BrowseCommand)
Tk::ValidateConfigure.__def_validcmd(binding, CellCommand)
Tk::ValidateConfigure.__def_validcmd(binding, SelectionCommand)
Tk::ValidateConfigure.__def_validcmd(binding, ValidateCommand)
#################################
def activate(idx)
tk_send('activate', tagid(idx))
end
def bbox(idx)
list(tk_send('bbox', tagid(idx)))
end
def border_mark(x, y)
simplelist(tk_send('scan', 'mark', x, y))
end
def border_mark_row(x, y)
tk_send('scan', 'mark', x, y, 'row')
end
def border_mark_col(x, y)
tk_send('scan', 'mark', x, y, 'col')
end
def border_dragto(x, y)
tk_send('scan', 'dragto', x, y)
end
def clear_cache(first=None, last=None)
tk_send('clear', 'cache', tagid(first), tagid(last))
self
end
def clear_sizes(first=None, last=None)
tk_send('clear', 'sizes', tagid(first), tagid(last))
self
end
def clear_tags(first=None, last=None)
tk_send('clear', 'tags', tagid(first), tagid(last))
self
end
def clear_all(first=None, last=None)
tk_send('clear', 'all', tagid(first), tagid(last))
self
end
def curselection
simplelist(tk_send('curselection'))
end
def curselection=(val)
tk_send('curselection', val)
val
end
def curvalue
tk_tcl2ruby(tk_send('curvalue'), true, false)
end
def curvalue=(val)
tk_send('curvalue', val)
val
end
def delete_active(idx1, idx2=None)
tk_send('delete', 'active', tagid(idx1), tagid(idx2))
self
end
def delete_cols(*args) # ?switches_array?, index, ?count?
params = []
if args[0].kind_of?(Array)
switches = args.shift
switches.each{|k| params << "-#{k}"}
end
params << '--'
params << tagid(args.shift)
params.concat(args)
tk_send('delete', 'cols', *params)
self
end
def delete_rows(*args) # ?switches_array?, index, ?count?
params = []
if args[0].kind_of?(Array)
switches = args.shift
switches.each{|k| params << "-#{k}"}
end
params << '--'
params << tagid(args.shift)
params.concat(args)
tk_send('delete', 'rows', *params)
self
end
def get(idx)
tk_tcl2ruby(tk_send('get', tagid(idx)), true, false)
end
def get_area(idx1, idx2)
simplelist(tk_send('get', tagid(idx1), tagid(idx2))).collect{|v|
tk_tcl2ruby(v, true, false)
}
end
def height_list
list(tk_send('height'))
end
def height(row)
number(tk_send('height', row))
end
def set_height(*pairs)
tk_send('height', *(pairs.flatten))
self
end
def hidden_list
simplelist(tk_send('hidden'))
end
def hidden?(idx, *args)
if args.empty?
if (ret = tk_send('hidden', tagid(idx))) == ''
false
else
ret
end
else
bool(tk_send('hidden', tagid(idx), *(args.collect{|i| tagid(i)})))
end
end
def icursor
number(tk_send('icursor'))
end
def icursor_set(idx)
number(tk_send('icursor', tagid(idx)))
end
def index(idx)
tk_send('index', tagid(idx))
end
def row_index(idx)
number(tk_send('index', tagid(idx), 'row'))
end
def col_index(idx)
number(tk_send('index', tagid(idx), 'col'))
end
def insert_active(idx, val)
tk_send('insert', 'active', tagid(idx), val)
self
end
def insert_cols(*args) # ?switches_array?, index, ?count?
params = []
if args[0].kind_of?(Array)
switches = args.shift
switches.each{|k| params << "-#{k}"}
end
params << '--'
params.concat(args)
params << tagid(args.shift)
tk_send('insert', 'cols', *params)
self
end
def insert_rows(*args) # ?switches_array?, index, ?count?
params = []
if args[0].kind_of?(Array)
switches = args.shift
switches.each{|k| params << "-#{k}"}
end
params << '--'
params << tagid(args.shift)
params.concat(args)
tk_send('insert', 'rows', *params)
self
end
# def postscript(*args)
# tk_send('postscript', *args)
# end
def reread
tk_send('reread')
self
end
def scan_mark(x, y)
tk_send('scan', 'mark', x, y)
self
end
def scan_dragto(x, y)
tk_send('scan', 'dragto', x, y)
self
end
def see(idx)
tk_send('see', tagid(idx))
self
end
def selection_anchor(idx)
tk_send('selection', 'anchor', tagid(idx))
self
end
def selection_clear(first, last=None)
tk_send('selection', 'clear', tagid(first), tagid(last))
self
end
def selection_clear_all
selection_clear('all')
end
def selection_include?(idx)
bool(tk_send('selection', 'includes', tagid(idx)))
end
def selection_set(first, last=None)
tk_send('selection', 'set', tagid(first), tagid(last))
self
end
def set(*pairs) # idx, val, idx, val, ...
args = []
0.step(pairs.size-1, 2){|i|
args << tagid(pairs[i])
args << pairs[i+1]
}
tk_send('set', *args)
self
end
def set_row(*pairs) # idx, val, idx, val, ...
args = []
0.step(pairs.size-1, 2){|i|
args << tagid(pairs[i])
args << pairs[i+1]
}
tk_send('set', 'row', *args)
self
end
def set_col(*pairs) # idx, val, idx, val, ...
args = []
0.step(pairs.size-1, 2){|i|
args << tagid(pairs[i])
args << pairs[i+1]
}
tk_send('set', 'col', *args)
self
end
=begin
def set(*pairs) # idx, val, idx, val, ... OR [idx, val], [idx, val], ...
if pairs[0].kind_of?(Array)
# [idx, val], [idx, val], ...
args = []
pairs.each{|idx, val| args << tagid(idx) << val }
tk_send('set', *args)
else
# idx, val, idx, val, ...
args = []
0.step(pairs.size-1, 2){|i|
args << tagid(pairs[i])
args << pairs[i+1]
}
tk_send('set', *args)
end
self
end
def set_row(*pairs)
if pairs[0].kind_of?(Array)
# [idx, val], [idx, val], ...
args = []
pairs.each{|idx, val| args << tagid(idx) << val }
tk_send('set', 'row', *args)
else
# idx, val, idx, val, ...
args = []
0.step(pairs.size-1, 2){|i|
args << tagid(pairs[i])
args << pairs[i+1]
}
tk_send('set', 'row', *args)
end
self
end
def set_col(*pairs)
if pairs[0].kind_of?(Array)
# [idx, val], [idx, val], ...
args = []
pairs.each{|idx, val| args << idx << val }
tk_send('set', 'col', *args)
else
# idx, val, idx, val, ...
args = []
0.step(pairs.size-1, 2){|i|
args << tagid(pairs[i])
args << pairs[i+1]
}
tk_send('set', 'col', *args)
end
self
end
=end
def spans
simplelist(tk_send('spans')).collect{|inf|
lst = simplelist(inf)
idx = lst[0]
rows, cols = lst[1].split(',').map!{|n| Integer(n)}
[idx [rows, cols]]
}
end
alias span_list spans
def span(idx)
lst = simplelist(tk_send('spans', tagid(idx)))
idx = lst[0]
rows, cols = lst[1].split(',').map!{|n| Integer(n)}
[idx [rows, cols]]
end
def set_spans(*pairs)
# idx, val, idx, val, ...
args = []
0.step(pairs.size-1, 2){|i|
args << tagid(pairs[i])
val = pairs[i+1]
if val.kind_of?(Array)
args << val.join(',')
else
args << val
end
}
tk_send('spans', *args)
self
end
=begin
def set_spans(*pairs)
if pairs[0].kind_of?(Array)
# [idx, val], [idx, val], ...
args = []
pairs.each{|idx, val|
args << tagid(idx)
if val.kind_of?(Array)
args << val.join(',')
else
args << val
end
}
tk_send('spans', *args)
else
# idx, val, idx, val, ...
args = []
0.step(pairs.size-1, 2){|i|
args << tagid(pairs[i])
val = pairs[i+1]
if val.kind_of?(Array)
args << val.join(',')
else
args << val
end
}
tk_send('spans', *args)
end
self
end
=end
def tagid(tag)
if tag.kind_of?(Tk::TkTable::CellTag)
tag.id
elsif tag.kind_of?(Array)
if tag[0].kind_of?(Integer) && tag[1].kind_of?(Integer)
# [row, col]
tag.join(',')
else
tag
end
else
tag
end
end
def tagid2obj(tagid)
if Tk::TkTable::CellTag::CellTagID_TBL.key?(@path)
if Tk::TkTable::CellTag::CellTagID_TBL[@path].key?(tagid)
Tk::TkTable::CellTag::CellTagID_TBL[@path][tagid]
else
tagid
end
else
tagid
end
end
def tag_cell(tag, *cells)
tk_send('tag', 'cell', tagid(tag), *(cells.collect{|idx| tagid(idx)}))
self
end
def tag_reset(*cells)
tk_send('tag', 'cell', '', *(cells.collect{|idx| tagid(idx)}))
self
end
def tag_col(tag, *cols)
tk_send('tag', 'col', tagid(tag), *cols)
self
end
def tag_col_reset(*cols)
tk_send('tag', 'col', '', *cols)
self
end
def tag_delete(tag)
tk_send('tag', 'delete', tagid(tag))
if Tk::TkTable::CellTag::CellTagID_TBL[@path]
if tag.kind_of? Tk::TkTable::CellTag
Tk::TkTable::CellTag::CellTagID_TBL[@path].delete(tag.id)
else
Tk::TkTable::CellTag::CellTagID_TBL[@path].delete(tag)
end
end
self
end
def tag_exist?(tag)
bool(tk_send('tag', 'exists', tagid(tag)))
end
def tag_include?(tag, idx)
bool(tk_send('tag', 'includes', tagid(tag), tagid(idx)))
end
def tag_lower(tag, target=None)
tk_send('tag', 'lower', tagid(tag), tagid(target))
self
end
def tag_names(pat=None)
simplelist(tk_send('tag', 'names', pat)).collect{|tag| tagid2obj(tag)}
end
def tag_raise(tag, target=None)
tk_send('tag', 'raise', tagid(tag), tagid(target))
self
end
def tag_row(tag, *rows)
tk_send('tag', 'row', tagid(tag), *rows)
self
end
def tag_row_reset(*rows)
tk_send('tag', 'row', '', *rows)
self
end
def validate(idx)
bool(tk_send('validate', tagid(idx)))
end
def width_list
list(tk_send('width'))
end
def width(row)
number(tk_send('width', row))
end
def set_width(*pairs)
tk_send('width', *(pairs.flatten))
self
end
def window_delete(*args)
tk_send('window', 'delete', *(args.collect{|idx| tagid(idx)}))
self
end
def window_move(from_idx, to_idx)
tk_send('window', 'move', tagid(from_idx), tagid(to_idx))
self
end
def window_names(pat=None)
simplelist(tk_send('window', 'names', pat))
end
end

View file

@ -18,6 +18,8 @@ TkPackage.require('vu')
# autoload # autoload
module Tk module Tk
module Vu module Vu
TkComm::TkExtlibAutoloadModule.unshift(self)
def self.package_version def self.package_version
begin begin
TkPackage.require('vu') TkPackage.require('vu')

View file

@ -39,6 +39,10 @@ class Tk::Vu::Pie < TkWindow
WidgetClassName = 'Pie'.freeze WidgetClassName = 'Pie'.freeze
WidgetClassNames[WidgetClassName] = self WidgetClassNames[WidgetClassName] = self
def __destroy_hook__
Tk::Vu::PieSlice::SliceID_TBL.delete(@path)
end
############################### ###############################
include Tk::Vu::PieSliceConfigMethod include Tk::Vu::PieSliceConfigMethod
@ -112,7 +116,7 @@ end
class Tk::Vu::PieSlice class Tk::Vu::PieSlice
SliceID_TBL = TkCore::INTERP.create_table SliceID_TBL = TkCore::INTERP.create_table
Pie_Slice_ID = ['vu_pie'.freeze, '00000'.taint].freeze Pie_Slice_ID = ['vu:pie'.freeze, '00000'.taint].freeze
TkCore::INTERP.init_ip_env{ SliceID_TBL.clear } TkCore::INTERP.init_ip_env{ SliceID_TBL.clear }
def self.id2obj(pie, id) def self.id2obj(pie, id)

View file

@ -2,7 +2,7 @@
######################################################################### #########################################################################
### The following text is the original file of the Tcl/Tk extension. ### ### The following text is the original file of the Tcl/Tk extension. ###
### Icon data files ( those are 'tkIcons', 'tkIcons-sample.kde', and ### ### Icon data files ( those are 'tkIcons', 'tkIcons-sample.kde', and ###
### 'tkIcons.kde' ) are refered from the source archive of ICONS ### ### 'tkIcons.kde' ) are quoted from the source archive of ICONS ###
### extension. As the following document describes, those icon images ### ### extension. As the following document describes, those icon images ###
### are not applied the license. ### ### are not applied the license. ###
######################################################################### #########################################################################

View file

@ -228,7 +228,7 @@ class ViewIcons
name = @icon_name[item] name = @icon_name[item]
data_width = 60 data_width = 60
cmd = "#{name} = TkPhotoImage.new(:date=><<'EOD')\n" cmd = "#{name} = TkPhotoImage.new(:data=><<'EOD')\n"
icon_data = Tk::ICONS.query(name, :file=>@library.value, :items=>'d')[0][0] icon_data = Tk::ICONS.query(name, :file=>@library.value, :items=>'d')[0][0]

View file

@ -5,7 +5,7 @@
### Original Tcl source files are not include in this directry, ### ### Original Tcl source files are not include in this directry, ###
### because of all of them are rewrited to Ruby files. ### ### because of all of them are rewrited to Ruby files. ###
### However, the bitmap data files ('bwidgtet.xbm' and 'x1.xbm') ### ### However, the bitmap data files ('bwidgtet.xbm' and 'x1.xbm') ###
### included in this directory are referd from BWidget source ### ### included in this directory are quoted from BWidget source ###
### archive. So, those bitmaps are under the following license. ### ### archive. So, those bitmaps are under the following license. ###
###################################################################### ######################################################################

View file

@ -1,6 +1,9 @@
# #
# basic demo --- called from demo.rb # basic demo --- called from demo.rb
# #
unless Object.const_defined?('DemoVar')
fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. "
end
module DemoBasic module DemoBasic
@@var = TkVariable.new_hash @@var = TkVariable.new_hash

View file

@ -1,6 +1,9 @@
# #
# dnd demo --- called from demo.rb # dnd demo --- called from demo.rb
# #
unless Object.const_defined?('DemoVar')
fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. "
end
module DemoDnD module DemoDnD
def self.create(nb) def self.create(nb)

View file

@ -1,6 +1,9 @@
# #
# manager demo --- called from demo.rb # manager demo --- called from demo.rb
# #
unless Object.const_defined?('DemoVar')
fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. "
end
module DemoManager module DemoManager
@@progress = TkVariable.new(false) @@progress = TkVariable.new(false)

View file

@ -1,6 +1,9 @@
# #
# select demo --- called from demo.rb # select demo --- called from demo.rb
# #
unless Object.const_defined?('DemoVar')
fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. "
end
module DemoSelect module DemoSelect
@@var = TkVariable.new_hash @@var = TkVariable.new_hash

View file

@ -1,6 +1,9 @@
# #
# templdlg demo --- called from demo.rb # templdlg demo --- called from demo.rb
# #
unless Object.const_defined?('DemoVar')
fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. "
end
module DemoDialog module DemoDialog
@@tmpl = TkVariable.new_hash @@tmpl = TkVariable.new_hash

View file

@ -1,6 +1,9 @@
# #
# templdlg demo --- called from demo.rb # templdlg demo --- called from demo.rb
# #
unless Object.const_defined?('DemoVar')
fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. "
end
module DemoTree module DemoTree
@@count = 0 @@count = 0

View file

@ -0,0 +1,42 @@
#######################################################################
### The following text is the original 'license.terms' of iwidges ###
### extension. ###
### Original Tcl source files are not include in this directry, ###
### because of all of them are rewrited to Ruby files. ###
### However, the image data files in the 'images' directory are ###
### quoted from iwidgets source archive. ###
#######################################################################
This software is copyrighted by DSC Technologies and private individual
contributors. The copyright holder is specifically listed in the header
of each file. The following terms apply to all files associated with the
software unless explicitly disclaimed in individual files by private
contributors.
Copyright 1997 DSC Technologies Corporation
Permission to use, copy, modify, distribute and license this software and
its documentation for any purpose, and without fee or written agreement
with DSC, is hereby granted, provided that the above copyright notice
appears in all copies and that both the copyright notice and warranty
disclaimer below appear in supporting documentation, and that the names of
DSC Technologies Corporation or DSC Communications Corporation not be used
in advertising or publicity pertaining to the software without specific,
written prior permission.
DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, 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. IN NO EVENT SHALL DSC BE LIABLE FOR ANY
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, ARISING OUT OF OR IN
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
RESTRICTED RIGHTS: Use, duplication or disclosure by the government
is subject to the restrictions as set forth in subparagraph (c) (1) (ii)
of the Rights in Technical Data and Computer Software Clause as DFARS
252.227-7013 and FAR 52.227-19.

View file

@ -0,0 +1,14 @@
#define Tool_32_box_width 32
#define Tool_32_box_height 32
static unsigned char Tool_32_box_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x20, 0x00, 0x00, 0x08,
0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08,
0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08,
0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08,
0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08,
0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08,
0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 B

View file

@ -0,0 +1,14 @@
#define lineOp_width 32
#define lineOp_height 32
static unsigned char lineOp_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00,
0x80, 0x07, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00,
0x00, 0x3c, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
0x00, 0xe0, 0x01, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00,
0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x3c, 0x00,
0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xe0, 0x01,
0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x0f,
0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

View file

@ -0,0 +1,14 @@
#define ovalOp_width 32
#define ovalOp_height 32
static unsigned char ovalOp_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00,
0x00, 0x1c, 0x70, 0x00, 0x00, 0x03, 0x80, 0x01, 0x80, 0x00, 0x00, 0x02,
0x40, 0x00, 0x00, 0x04, 0x20, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x10,
0x10, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x20,
0x08, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x20, 0x10, 0x00, 0x00, 0x10,
0x10, 0x00, 0x00, 0x10, 0x20, 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x04,
0x80, 0x00, 0x00, 0x02, 0x00, 0x03, 0x80, 0x01, 0x00, 0x1c, 0x70, 0x00,
0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

View file

@ -0,0 +1,14 @@
#define dotPencilOp_width 32
#define dotPencilOp_height 32
static unsigned char dotPencilOp_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x12, 0x00,
0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x80, 0x04, 0x00,
0x00, 0x80, 0x04, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00,
0x00, 0x20, 0x01, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00,
0x00, 0x90, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00,
0x00, 0x24, 0x00, 0x18, 0x00, 0x24, 0x00, 0x18, 0x00, 0x12, 0x00, 0x00,
0x00, 0x12, 0x00, 0x30, 0x00, 0x0e, 0x00, 0x30, 0x00, 0x06, 0x00, 0x00,
0x00, 0x06, 0x0c, 0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x30, 0xa0, 0x01,
0x00, 0x60, 0xb0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 B

View file

@ -0,0 +1,14 @@
#define font_edit_width 32
#define font_edit_height 32
static unsigned char font_edit_bits[] = {
0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1c,
0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x80, 0x7b,
0x00, 0x00, 0x80, 0x7e, 0x00, 0x00, 0xc0, 0xfd, 0x00, 0x00, 0x60, 0xfb,
0x00, 0x00, 0xb0, 0xf7, 0x00, 0x00, 0xd0, 0xef, 0x00, 0x00, 0xf8, 0xdf,
0x00, 0x00, 0xd4, 0x7f, 0x00, 0x00, 0xaa, 0x1f, 0x00, 0x00, 0x15, 0x0f,
0x00, 0x80, 0x82, 0x06, 0x03, 0x40, 0x01, 0x01, 0x07, 0xa0, 0x80, 0x00,
0x0f, 0x10, 0x40, 0x00, 0x1f, 0x08, 0x20, 0x00, 0x3b, 0xe4, 0x1f, 0x00,
0x73, 0x1a, 0x00, 0x00, 0xe3, 0x07, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x00,
0xe3, 0x03, 0x00, 0x00, 0x7b, 0x07, 0x00, 0x00, 0x1f, 0x06, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };

View file

@ -4,7 +4,7 @@ require 'tkextlib/iwidgets'
Tk::Iwidgets::Feedback.new(:labeltext=>'Status', :steps=>20){|fb| Tk::Iwidgets::Feedback.new(:labeltext=>'Status', :steps=>20){|fb|
pack(:padx=>10, :pady=>10, :fill=>:both, :expand=>true) pack(:padx=>10, :pady=>10, :fill=>:both, :expand=>true)
TkTimer.new(500, 20, proc{fb.step}).start(5000) TkTimer.new(500, 20, proc{fb.step}).start(2500)
} }
Tk.mainloop Tk.mainloop

View file

@ -0,0 +1,15 @@
#!/usr/bin/env ruby
require 'tk'
require 'tkextlib/iwidgets'
mainloop = Thread.new{Tk.mainloop}
st = Tk::Iwidgets::Scrolledtext.new.pack
st.insert('end', "Now is the time for all good men\n")
st.insert('end', "to come to the aid of their country")
fd = Tk::Iwidgets::Finddialog.new(:textwidget=>st)
fd.center(st)
fd.activate
mainloop.join

View file

@ -0,0 +1,14 @@
#!/usr/bin/env ruby
require 'tk'
require 'tkextlib/iwidgets'
lf = Tk::Iwidgets::Labeledframe.new(:labeltext=>'Entry Frame', :labelpos=>:n)
lf.pack(:fill=>:both, :expand=>true, :padx=>10, :pady=>10)
cs = lf.child_site
Tk::Iwidgets::Entryfield.new(cs, :labeltext=>'Name:').pack(:side=>:top, :fill=>:x)
Tk::Iwidgets::Spinint.new(cs, :labeltext=>'Number:').pack(:side=>:top, :fill=>:x)
Tk::Iwidgets::Pushbutton.new(cs, :text=>'Details:').pack(:side=>:top, :fill=>:x)
Tk.mainloop

View file

@ -0,0 +1,64 @@
#!/usr/bin/env ruby
require 'tk'
require 'tkextlib/iwidgets'
mw = Tk::Iwidgets::Mainwindow.new
mw.menubar.add(:menubutton, 'file', :text=>'File', :underline=>0,
:padx=>8, :pady=>2, :menu=>[
[:options, {:tearoff=>false}],
[:command, 'new', {
:label=>'New', :underline=>0,
:helpstr=>'Create a new file'
}
],
[:command, 'open', {
:label=>'Open ...', :underline=>0,
:helpstr=>'Open an existing file'
}
],
[:command, 'save', {
:label=>'Save', :underline=>0,
:helpstr=>'Save the current file'
}
],
[:command, 'saveas', {
:label=>'Save As', :underline=>5,
:helpstr=>'Save the file as a different name'
}
],
[:command, 'print', {
:label=>'Print', :underline=>0,
:helpstr=>'Print the file'
}
],
[:separator, 'sep1'],
[:command, 'close', {
:label=>'Close', :underline=>0,
:helpstr=>'Close the file'
}
],
[:separator, 'sep2'],
[:command, 'exit', {
:label=>'Exit', :underline=>1,
:helpstr=>'Exit this application'
}
],
nil
])
Tk::Iwidgets::Scrolledtext.new(mw.child_site).pack(:fill=>:both, :expand=>true)
mw.activate
Tk.mainloop

View file

@ -0,0 +1,124 @@
#!/usr/bin/env ruby
require 'tk'
require 'tkextlib/iwidgets'
helpvar = TkVariable.new
viewmode = TkVariable.new
menu_spec = [
[:menubutton, 'file', {
:text=>'File', :menu=>[
[:options, {:tearoff=>false}],
[:command, 'new', {
:label=>'New', :helpstr=>'Open new document',
:command=>proc{puts 'NEW'}
}
],
[:command, 'close', {
:label=>'Close', :helpstr=>'Close current document',
:command=>proc{puts 'CLOSE'}
}
],
[:separator, 'sep1'],
[:command, 'exit', {
:label=>'Exit', :helpstr=>'Exit application',
:command=>proc{exit}
}
]
]
}
],
[:menubutton, 'edit', {
:text=>'Edit', :menu=>[
[:options, {:tearoff=>false}],
[:command, 'undo', {
:label=>'Undo', :underline=>0,
:helpstr=>'Undo last command',
:command=>proc{puts 'UNDO'}
}
],
[:separator, 'sep2'],
[:command, 'cut', {
:label=>'Cut', :underline=>1,
:helpstr=>'Cut selection to clipboard',
:command=>proc{puts 'CUT'}
}
],
[:command, 'copy', {
:label=>'Copy', :underline=>1,
:helpstr=>'Copy selection to clipboard',
:command=>proc{puts 'COPY'}
}
],
[:command, 'paste', {
:label=>'Paste', :underline=>0,
:helpstr=>'Paste clipboard contents',
:command=>proc{puts 'PASTE'}
}
]
]
}
],
[:menubutton, 'options', {
:text=>'Options', :menu=>[
[:options, {:tearoff=>false, :selectcolor=>'blue'}],
[:radiobutton, 'byName', {
:variable=>viewmode, :value=>'NAME',
:label=>'by Name', :helpstr=>'View files by name order',
:command=>proc{puts 'NAME'}
}
],
[:radiobutton, 'byDate', {
:variable=>viewmode, :value=>'DATE',
:label=>'by Date', :helpstr=>'View files by date order',
:command=>proc{puts 'DATE'}
}
],
[:cascade, 'prefs', {
:label=>'Preferences', :menu=>[
[:command, 'colors', {
:label=>'Colors...', :helpstr=>'Change text colors',
:command=>proc{puts 'COLORS'}
}
],
[:command, 'fonts', {
:label=>'Fonts...', :helpstr=>'Change text font',
:command=>proc{puts 'COLORS'}
}
]
]
}
]
]
}
]
]
#mb = Tk::Iwidgets::Menubar.new(:helpvariable=>helpvar,
# :menubuttons=>menu_spec)
mb = Tk::Iwidgets::Menubar.new(:helpvariable=>helpvar)
mb.configure(:menubuttons=>menu_spec)
fr = TkFrame.new(:width=>300, :height=>300)
ef = TkEntry.new(:textvariable=>helpvar)
mb.pack(:anchor=>:nw, :fill=>:x, :expand=>true)
fr.pack(:fill=>:both, :expand=>true)
ef.pack(:anchor=>:sw, :fill=>:x, :expand=>true)
Tk.mainloop

View file

@ -0,0 +1,44 @@
#!/usr/bin/env ruby
require 'tk'
require 'tkextlib/iwidgets'
helpvar = TkVariable.new
viewmode = TkVariable.new
mb = Tk::Iwidgets::Menubar.new
mb.menubuttons = [
[:menubutton, 'file', {
:text=>'File', :menu=>[
[:command, 'new', {:label=>'New'}],
[:command, 'close', {:label=>'Close'}],
[:separator, 'sep1'],
[:command, 'quit', {:label=>'Quit'}]
]
}
],
[:menubutton, 'edit', {:text=>'Edit'}]
]
mb.add(:command, '.edit.undo', :label=>'Undo', :underline=>0)
mb.add(:separator, '.edit.sep2')
mb.add(:command, '.edit.cut', :label=>'Cut', :underline=>1)
mb.add(:command, '.edit.copy', :label=>'Copy', :underline=>1)
mb.add(:command, '.edit.paste', :label=>'Paste', :underline=>0)
mb.add(:menubutton, '.options', :text=>'Options', :menu=>[
[:radiobutton, 'byName', {
:variable=>viewmode, :value=>'NAME', :label=>'by Name'}
],
[:radiobutton, 'byDate', {
:variable=>viewmode, :value=>'DATE', :label=>'by Date'}
]
])
mb.add(:cascade, '.options.prefs', :label=>'Preferences', :menu=>[
[:command, 'colors', {:label=>'Colors...'}],
[:command, 'fonts', {:label=>'Fonts...'}]
])
mb.pack(:side=>:left, :anchor=>:nw, :fill=>:x, :expand=>true)
Tk.mainloop

View file

@ -0,0 +1,30 @@
#!/usr/bin/env ruby
require 'tk'
require 'tkextlib/iwidgets'
# Create the tabnotebook widget and pack it.
nb = Tk::Iwidgets::Notebook.new(:width=>100, :height=>100)
nb.pack(:anchor=>:nw, :fill=>:both, :expand=>true,
:side=>:left, :padx=>10, :pady=>10)
# Add two pages to the tabnotebook,
# labelled "Page One" and "Page Two"
nb.add(:label=>'Page One')
nb.add(:label=>'Page Two')
# Get the child site frames of these two pages.
page1CS = nb.child_site(0)
page2CS = nb.child_site('Page Two')
# Create buttons on each page of the tabnotebook.
TkButton.new(page1CS, :text=>'Button One').pack
TkButton.new(page2CS, :text=>'Button Two').pack
# Select the first page of the tabnotebook.
nb.select(0)
# Create the scrollbar and associate teh scrollbar
# and the notebook together, then pack the scrollbar
nb.scrollbar(TkScrollbar.new).pack(:fill=>:y, :expand=>true, :pady=>10)
Tk.mainloop

View file

@ -0,0 +1,30 @@
#!/usr/bin/env ruby
require 'tk'
require 'tkextlib/iwidgets'
# Create the tabnotebook widget and pack it.
nb = Tk::Iwidgets::Notebook.new(:width=>100, :height=>100)
nb.pack(:anchor=>:nw, :fill=>:both, :expand=>true,
:side=>:top, :padx=>10, :pady=>0)
# Add two pages to the tabnotebook,
# labelled "Page One" and "Page Two"
nb.add(:label=>'Page One')
nb.add(:label=>'Page Two')
# Get the child site frames of these two pages.
page1CS = nb.child_site(0)
page2CS = nb.child_site('Page Two')
# Create buttons on each page of the tabnotebook.
TkButton.new(page1CS, :text=>'Button One').pack
TkButton.new(page2CS, :text=>'Button Two').pack
# Select the first page of the tabnotebook.
nb.select(0)
# Create the scrollbar and associate teh scrollbar
# and the notebook together, then pack the scrollbar
nb.xscrollbar(TkScrollbar.new).pack(:fill=>:x, :expand=>true, :padx=>10)
Tk.mainloop

Some files were not shown because too many files have changed in this diff Show more