mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* ext/tk/*: full update Ruby/Tk to support Ruby(1.9|1.8) and Tc/Tk8.5.
* ext/tk/lib/tkextlib/tile.rb: [incompatible] remove TileWidgets' instate/state/identify method to avoid the conflict with standard widget options. Those methods are renamed to ttk_instate/ttk_state/ ttk_identify (tile_instate/tile_state/tile_identify are available too). Although I don't recommend, if you realy need old methods, please define "Tk::USE_OBSOLETE_TILE_STATE_METHOD = true" before "require 'tkextlib/tile'". * ext/tk/lib/tkextlib/tile.rb: "Tk::Tile::__Import_Tile_Widgets__!" is obsolete. It outputs warning. To control default widget set, use "Tk.default_widget_set = :Ttk". * ext/tk/lib/tk.rb: __IGNORE_UNKNOWN_CONFIGURE_OPTION__ method and __set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!(mode) method are defind as module methods of TkConfigMethod. It may help users to wrap old Ruby/Tk scripts (use standard widgets) to force to use Ttk widgets. Ttk widgets don't have some options of standard widgets which are control the view of widgets. When set ignore-mode true, configure method tries to ignoure such unknown options with no exception. Of course, it may raise other troubles on the GUI design. So, those are a little danger methods. * ext/tk/lib/tk/itemconfig.rb: __IGNORE_UNKNOWN_CONFIGURE_OPTION__ method and __set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!(mode) method are defind as module methods of TkItemConfigMethod as the same purpose as TkConfigMethod's ones. * ext/tk/sample/ttk_wrapper.rb: A new example. This is a tool for wrapping old Ruby/Tk scripts (which use standard widgets) to use Ttk (Tile) widgets as default. * ext/tk/sample/tkextlib/tile/demo.rb: use ttk_instate/ttk_state method instead of instate/state method. * ext/tk/lib/tk/root, ext/tk/lib/tk/namespace.rb, ext/tk/lib/tk/text.rb, ext/tk/lib/tkextlib/*: some 'instance_eval's are replaced to "instance_exec(self)". * ext/tk/lib/tk/event.rb: bug fix on KEY_TBL and PROC_TBL (?x is not a character code on Ruby1.9). * ext/tk/lib/tk/variable.rb: support new style of operation argument on Tcl/Tk's 'trace' command for variables. * ext/tk/sample/demos-jp/widget, ext/tk/sample/demos-en/widget: bug fix * ext/tk/sammple/demos-jp/textpeer.rb, ext/tk/sammple/demos-en/textpeer.rb: new widget demo. * ext/tk/tcltklib.c: decrase SEGV troubles (probably) * ext/tk/lib/tk.rb: remove Thread.critical access if Ruby1.9 * ext/tk/lib/tk/multi-tk.rb: support Ruby1.9 (probably) * ext/tk/lib/tkextlib/tile.rb: add method to define Tcl/Tk command to make Tcl/Tk theme sources (based on different version of Tile extension) available. (Tk::Tile::__define_LoadImages_proc_for_comaptibility__) * ext/tk/lib/tk.rb, ext/tk/lib/tk/wm.rb: support dockable frames (Tcl/Tk8.5 feature). 'wm' command can treat many kinds of widgets as toplevel widgets. * ext/tk/lib/tkextlib/tile/style.rb: ditto. (Tk::Tile::Style.__define_wrapper_proc_for_compatibility__) * ext/tk/lib/tk/font.rb: add actual_hash and metrics_hash to get properties as a hash. metrics_hash method returns a boolean value for 'fixed' option. But metrics method returns numeric value (0 or 1) for 'fixed' option, because of backward compatibility. * ext/tk/lib/tk/timer.rb: somtimes fail to set callback procedure. * ext/tk/lib/tk.rb: add Tk.sleep and Tk.wakeup method. Tk.sleep doesn't block the eventloop. It will be better to use the method in event callbacks. * ext/tk/sample/tksleep_sample.rb: sample script about Tk.sleep. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@15849 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									058c981311
								
							
						
					
					
						commit
						aff4ce9c77
					
				
					 238 changed files with 9566 additions and 2732 deletions
				
			
		| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
# -*- coding: euc-jp -*-
 | 
			
		||||
#
 | 
			
		||||
# This demonstration illustrates how Tcl/Tk can be used to construct
 | 
			
		||||
# simulations of physical systems.
 | 
			
		||||
| 
						 | 
				
			
			@ -50,9 +51,11 @@ TkFrame.new($pendulum_demo) {|frame|
 | 
			
		|||
class PendulumAnimationDemo
 | 
			
		||||
  def initialize(frame)
 | 
			
		||||
    # Create some structural widgets
 | 
			
		||||
    pane = TkPanedWindow.new(frame).pack(:fill=>:both, :expand=>true)
 | 
			
		||||
    pane.add(@lf1 = TkLabelFrame.new(pane, :text=>'Pendulum Simulation'))
 | 
			
		||||
    pane.add(@lf2 = TkLabelFrame.new(pane, :text=>'Phase Space'))
 | 
			
		||||
    @pane = TkPanedWindow.new(frame).pack(:fill=>:both, :expand=>true)
 | 
			
		||||
#    @pane.add(@lf1 = TkLabelFrame.new(@pane, :text=>'Pendulum Simulation'))
 | 
			
		||||
#    @pane.add(@lf2 = TkLabelFrame.new(@pane, :text=>'Phase Space'))
 | 
			
		||||
    @lf1 = TkLabelFrame.new(@pane, :text=>'Pendulum Simulation')
 | 
			
		||||
    @lf2 = TkLabelFrame.new(@pane, :text=>'Phase Space')
 | 
			
		||||
 | 
			
		||||
    # Create the canvas containing the graphical representation of the
 | 
			
		||||
    # simulated system.
 | 
			
		||||
| 
						 | 
				
			
			@ -100,23 +103,24 @@ class PendulumAnimationDemo
 | 
			
		|||
    @dTheta = 0.0
 | 
			
		||||
    @length = 150
 | 
			
		||||
 | 
			
		||||
    # init display
 | 
			
		||||
    showPendulum
 | 
			
		||||
 | 
			
		||||
    # animation loop
 | 
			
		||||
    @timer = TkTimer.new(15){ repeat }
 | 
			
		||||
 | 
			
		||||
    # binding
 | 
			
		||||
    @c.bindtags_unshift(btag = TkBindTag.new)
 | 
			
		||||
    btag.bind('Destroy'){ @timer.stop }
 | 
			
		||||
    btag.bind('1', proc{|x, y| @timer.stop; showPendulum(x, y)}, '%x %y')
 | 
			
		||||
    btag.bind('B1-Motion', proc{|x, y| showPendulum(x, y)}, '%x %y')
 | 
			
		||||
    btag.bind('1', proc{|x, y| @timer.stop; showPendulum(x.to_i, y.to_i)}, 
 | 
			
		||||
              '%x %y')
 | 
			
		||||
    btag.bind('B1-Motion', proc{|x, y| showPendulum(x.to_i, y.to_i)}, '%x %y')
 | 
			
		||||
    btag.bind('ButtonRelease-1', 
 | 
			
		||||
              proc{|x, y| showPendulum(x, y); @timer.start }, '%x %y')
 | 
			
		||||
              proc{|x, y| showPendulum(x.to_i, y.to_i); @timer.start }, 
 | 
			
		||||
              '%x %y')
 | 
			
		||||
 | 
			
		||||
    btag.bind('Configure', proc{|w| @plate.coords(0, 25, w, 25)}, '%w')
 | 
			
		||||
    btag.bind('Configure', proc{|w| @plate.coords(0, 25, w.to_i, 25)}, '%w')
 | 
			
		||||
 | 
			
		||||
    @k.bind('Configure', proc{|h, w| 
 | 
			
		||||
              h = h.to_i
 | 
			
		||||
              w = w.to_i
 | 
			
		||||
              @psh = h/2; 
 | 
			
		||||
              @psw = w/2
 | 
			
		||||
              @x_axis.coords(2, @psh, w-2, @psh)
 | 
			
		||||
| 
						 | 
				
			
			@ -125,6 +129,14 @@ class PendulumAnimationDemo
 | 
			
		|||
              @label_dtheta.coords(w-6, @psh+4)
 | 
			
		||||
            }, '%h %w')
 | 
			
		||||
 | 
			
		||||
    # add
 | 
			
		||||
    Tk.update
 | 
			
		||||
    @pane.add(@lf1)
 | 
			
		||||
    @pane.add(@lf2)
 | 
			
		||||
 | 
			
		||||
    # init display
 | 
			
		||||
    showPendulum
 | 
			
		||||
 | 
			
		||||
    # animation start
 | 
			
		||||
    @timer.start(500)
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			@ -155,6 +167,10 @@ class PendulumAnimationDemo
 | 
			
		|||
  # rate at which the angle is changing (the first derivative with
 | 
			
		||||
  # respect to time.)
 | 
			
		||||
  def showPhase
 | 
			
		||||
    unless @psw && @psh
 | 
			
		||||
      @psw = @k.width/2
 | 
			
		||||
      @psh = @k.height/2
 | 
			
		||||
    end
 | 
			
		||||
    @points << @theta + @psw << -20*@dTheta + @psh
 | 
			
		||||
    if @points.length > 100
 | 
			
		||||
      @points = @points[-100..-1]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue