From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Mon, 16 Mar 2020 18:49:26 +0900 Subject: Fresh start --- jni/ruby/ext/tk/sample/tkextlib/tktable/buttons.rb | 76 ++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 jni/ruby/ext/tk/sample/tkextlib/tktable/buttons.rb (limited to 'jni/ruby/ext/tk/sample/tkextlib/tktable/buttons.rb') diff --git a/jni/ruby/ext/tk/sample/tkextlib/tktable/buttons.rb b/jni/ruby/ext/tk/sample/tkextlib/tktable/buttons.rb new file mode 100644 index 0000000..e35c137 --- /dev/null +++ b/jni/ruby/ext/tk/sample/tkextlib/tktable/buttons.rb @@ -0,0 +1,76 @@ +#!/usr/bin/env ruby +## +## buttons.rb +## +## demonstrates the simulation of a button array +## +## ( based on 'buttons.tcl' included source archive of tktable extension ) +## +require 'tk' +require 'tkextlib/tktable' + +# create the table +tab = TkVariable.new_hash +rows = 20 +cols = 20 + +table = Tk::TkTable.new(:rows=>rows + 1, :cols=>cols + 1, + :variable=>tab, :titlerows=>1, :titlecols=>1, + :roworigin=>-1, :colorigin=>-1, + :colwidth=>4, :width=>8, :height=>8, + :cursor=>'top_left_arrow', :borderwidth=>2, + :flashmode=>false, :state=>:disabled) + +sx = table.xscrollbar(TkScrollbar.new) +sy = table.yscrollbar(TkScrollbar.new) + +Tk.grid(table, sy, :sticky=>:news) +Tk.grid(sx, :sticky=>:ew) + +Tk.root.grid_columnconfig(0, :weight=>1) +Tk.root.grid_rowconfig(0, :weight=>1) + +# set up tags for the various states of the buttons +table.tag_configure('OFF', :bg=>'red', :relief=>:raised) +table.tag_configure('ON', :bg=>'green', :relief=>:sunken) +table.tag_configure('sel', :bg=>'gray75', :relief=>:flat) + +# clean up if mouse leaves the widget +table.bind('Leave', proc{|w| w.selection_clear_all}, '%W') + +# highlight the cell under the mouse +table.bind('Motion', proc{|w, x, y| + Tk.callback_break if w.selection_include?(TkComm._at(x,y)) + w.selection_clear_all + w.selection_set(TkComm._at(x,y)) + Tk.callback_break + ## "break" prevents the call to tkTableCheckBorder + }, '%W %x %y') + +# mousebutton 1 toggles the value of the cell +# use of "selection includes" would work here +table.bind('1', proc{|w, x, y| + #rc = w.curselection[0] + rc = w.index(TkComm._at(x,y)) + if tab[rc] == 'ON' + tab[rc] = 'OFF' + w.tag_cell('OFF', rc) + else + tab[rc] = 'ON' + w.tag_cell('ON', rc) + end}, '%W %x %y') + + +# inititialize the array, titles, and celltags +0.step(rows){|i| + tab[i,-1] = i + 0.step(cols){|j| + if i == 0 + tab[-1,j] = j + end + tab[i,j] = "OFF" + table.tag_cell('OFF', "#{i},#{j}") + } +} + +Tk.mainloop -- cgit v1.2.3