From 1a74fa4b04da04bd2bb33103dd3cf431438df38e Mon Sep 17 00:00:00 2001 From: usa Date: Thu, 14 Dec 2017 15:09:35 +0000 Subject: add tag v2_2_9 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v2_2_9@61257 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ruby_2_2/ext/tk/sample/tkextlib/tktable/valid.rb | 88 ++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 ruby_2_2/ext/tk/sample/tkextlib/tktable/valid.rb (limited to 'ruby_2_2/ext/tk/sample/tkextlib/tktable/valid.rb') diff --git a/ruby_2_2/ext/tk/sample/tkextlib/tktable/valid.rb b/ruby_2_2/ext/tk/sample/tkextlib/tktable/valid.rb new file mode 100644 index 0000000000..98e9c3855a --- /dev/null +++ b/ruby_2_2/ext/tk/sample/tkextlib/tktable/valid.rb @@ -0,0 +1,88 @@ +#!/usr/bin/env ruby +## +## valid.rb +## +## This demos shows the use of the validation mechanism of the table +## and uses the table's cache (no -command or -variable) +## +## ( based on 'valid.tcl' included source archive of tktable extension ) +## +require 'tk' +require 'tkextlib/tktable' + +rows = 10 +cols = 10 + +def colorize(num) + num = Integer(num) + return 'colored' if (num > 0 && num % 2 == 1) +end + +def fill_headers(w, r=10, c=10) + (1..(r-1)).each{|i| w.set([i,0], i.to_s)} + + (1..(c-1)).each{|j| + if j % 3 == 1 + w.set([0,j], 'AlphaNum') + elsif j % 2 == 1 + w.set([0,j], 'Alpha') + elsif j != 0 + w.set([0,j], 'Real') + end + } +end + +def validate_proc(c, val) + if c % 3 == 1 + # AlphaNum + regexp = /^[A-Za-z0-9 ]*$/ + elsif c % 2 == 1 + # Alpha + regexp = /^[A-Za-z ]*$/ + elsif c != 0 + # 'Real' + regexp = /^[-+]?[0-9]*\.?[0-9]*([0-9]\.?e[-+]?[0-9]*)?$/ + end + if val =~ regexp + return true + else + Tk.bell + return false + end +end + +lbl = TkLabel.new(:text=>"TkTable v1 Validated Table Example") + +table = Tk::TkTable.new(:rows=>rows, :cols=>cols, :cache=>1, + :width=>5, :height=>5, :titlerows=>1, :titlecols=>1, + :coltagcommand=>proc{|n| colorize(n)}, + :flashmode=>true, :selectmode=>:extended, + :colstretch=>:unset, :rowstretch=>:unset, + :validate=>true, + :validatecommand=>proc{|e| + unless e.widget.tag_include?('title', e.index) + validate_proc(e.column, e.new_value) + end } ) + +fill_headers(table) + +table.tag_configure('colored', :bg=>'lightblue') +table.tag_configure('title', :fg=>'red') +table.set_width(0,3) + +sx = table.xscrollbar(TkScrollbar.new) +sy = table.yscrollbar(TkScrollbar.new) + +btn = TkButton.new(:text=>'Exit', :command=>proc{exit}) + +Tk.grid(lbl, '-', :sticky=>:ew) +Tk.grid(table, sy, :sticky=>:news) +Tk.grid(sx, :sticky=>:ew) +Tk.grid(btn, '-', :sticky=>:ew) + +Tk.root.grid_columnconfig(0, :weight=>1) +Tk.root.grid_rowconfig(1, :weight=>1) + +puts "Table is #{table.path}" + +Tk.mainloop -- cgit v1.2.3