module TkAutoPostMenu
Public Class Methods
extended(_widget)
click to toggle source
# File lib/a-tkcommons.rb, line 2802 def self.extended(_widget) _widget.__initialize_posting(_widget) end
included(_widget)
click to toggle source
# File lib/a-tkcommons.rb, line 2806 def self.included(_widget) _widget.__initialize_posting(_widget) end
Public Instance Methods
__initialize_posting(_widget=self)
click to toggle source
# File lib/a-tkcommons.rb, line 2821 def __initialize_posting(_widget=self) # parent = TkWinfo.parent(_widget) # parent.bind_append("Enter", proc{p "Enter parent"}) # parent.bind_append("Leave", proc{p "Leave parent"}) chs = TkWinfo.children(_widget) hh = 22 @last_post = nil @posting_on = true @event_posting_on = false @m_show = Hash.new chs.each{|ch| next if ch.kind_of?(String) ch.menu.bind_append("Map", proc{ @m_show[ch.menu] = true }) ch.menu.bind_append("Unmap", proc{ @m_show[ch.menu] = false }) ch.bind_append("Enter", proc{|x,y,rx,ry| if @posting_on if @last_post && @last_post != ch.menu @last_post.unpost @last_post=nil end if @last_clicked && @last_clicked != ch.menu @last_clicked.unpost @last_clicked = nil end ch.menu.post(x-rx,y-ry+hh) #just_posted = TkWinfo.containing(x, y+hh) chmenus = TkWinfo.children(ch) @last_menu_posted = chmenus[0] @last_menu_posted.set_focus @last_menu_posted.bind("Enter", proc{ @last_menu_posted.bind("Leave", proc{ if @posting_on @last_post.unpost if @last_post @last_post = nil @last_menu_posted.bind("Enter", proc{}) @last_menu_posted.bind("Leave", proc{}) end }) }) #@last_post = just_posted end #@last_post=ch.menu }, "%X %Y %x %y") ch.bind_append("Leave", proc{ ch.configure("state"=>:normal, "relief"=>:flat) if @posting_on if @last_post _x = TkWinfo.x(@last_post) _y = TkWinfo.y(@last_post) ch.event_generate("KeyPress", :keysym=>"Escape") if Tk.focus.kind_of?(TkMenu) && Tk.focus != ch.menu @last_post.post(_x,_y) if @last_clicked && @last_clicked == ch.menu end if @last_post!=ch.menu @last_post=ch.menu else @last_post=nil end if !Tk.focus.kind_of?(TkMenu) @last_post.unpost if @last_post @last_post=nil end end }) ch.bind_append("1", proc{|x,y,rx,ry| @posting_on=true if @event_posting_on if @last_post && @last_post != ch.menu @last_post.unpost # @last_post.bind_remove("1") @last_post = nil end @last_post=ch.menu #if ch.state == 'active' ch.configure('state'=>'normal') @last_clicked = ch.menu # ch.menu.bind_append("1", proc{|mx,my,mrx,mry| # if ch.menu.index("active").nil? # ch.menu.activate(ch.menu.index("@#{mry}")) # end # }, "%X %Y %x %y") #@last_post.unpost #@last_post.post(0,0) #@last_post.set_focus @posting_on=true if @event_posting_on }, "%X %Y %x %y") } _widget.bind_append("Leave", proc{ if @posting_on && Tk.focus != @last_menu_posted @last_post.unpost if @last_post @last_post=nil @posting_on = false if @event_posting_on end TkAfter.new(1000,1, proc{ one_post = false @m_show.each{|m,v| one_post = v break if v } @posting_on = one_post if @event_posting_on }).start }) end
event_posting_off()
click to toggle source
# File lib/a-tkcommons.rb, line 2815 def event_posting_off @event_posting_on = false @posting_on = true end
event_posting_on()
click to toggle source
# File lib/a-tkcommons.rb, line 2810 def event_posting_on @event_posting_on = true @posting_on = false end