2009-05-01 12 views
1

ホールドされたときに、リール/スロット(少し重なり合っている)の側にホバーしている小さなウィンドウを作成する、rect/slotをセットアップしたい。ホバーとメニューとボタン

小さなメニューにいくつかのボタンを合わせたいと思います。小さなメニューが元のrect/slotよりも長く(幅が広い)、多くのボタンに合うようにしたいのですが、これはslot.hoverを使用できないことを意味します。 rectにあるボタンにはrectが...何か助けてくれますか?

答えて

0

ボタンの上にあるときだけでなく、スロットの上にあるときに、その矩形を開いて表示できるようにするために、何か追加のものを使う必要があるように聞こえます。

これは何かの上にメニューを保持する必要があります。

2

ここでは、これを達成するために必要なロジックを示す例を示します。あなたはこれらのメニューの束を持っていた場合、それは明らかに手に負えなくなります。ここ

Shoes.app :title => "Test", :width => 1000, :height => 600 do 
    @menu_hover = false 
    @zone_hover = false 
    @menu = nil 
    @zone = stack :width => 200, :height => 100 do 
    background '#DFA' 
    end 
    @zone.hover do 
    @zone_hover = true 
    app.append do 
     break if not @menu.nil? 
     @menu = stack :width => 230, :height => 35, :top => 50, :left => 150 do 
     background '#F00' 
     flow :margin => 5 do 
      button 'OK' 
      button 'Cancel' 
      button 'Ponies!' 
     end 
     end 
     @menu.hover {@menu_hover = true} 
     @menu.leave do 
      @menu_hover = false 
      break if @menu.nil? or @menu_hover or @zone_hover 
      @menu.remove 
      @menu = nil 
     end 
    end 
    end 

    @zone.leave do 
    @zone_hover = false 
    break if @menu.nil? or @menu_hover or @zone_hover 
    @menu.remove 
    @menu = nil 
    end 
end 

は靴を拡張し、上記溶液のリフです::スタックとシューズ::アプリケーションクラスがにhover?メソッドを追加します(私は彼らがデフォルトでサポートすべきだと思います)。あなたのケースでは、代わりにカスタムウィジェットを作成することを検討しますが、これは使用可能な構造の種類を示しています。

class Shoes::Stack 
    def hover? 
    @hover ||= false 
    end 

    alias_method :default_hover, :hover 
    alias_method :default_leave, :leave 

    def hover(*args, &block) 
    new_block = lambda { @hover = true; block.call } 
    default_hover(*args, &new_block) 
    end 

    def leave(*args, &block) 
    new_block = lambda { @hover = false; block.call } 
    default_leave(*args, &new_block) 
    end 
end 

class Shoes::App 
    alias_method :default_stack, :stack 
    def stack(*args, &block) 
    s = default_stack(*args, &block) 
    s.hover {} 
    s.leave {} 
    s 
    end 
end 

Shoes.app :title => "Test", :width => 1000, :height => 600 do 
    @menu = nil 
    @zone = stack :width => 200, :height => 100 do 
    background '#DFA' 
    end 
    @zone.hover do 
    app.append do 
     break if not @menu.nil? 
     @menu = stack :width => 230, :height => 35, :top => 50, :left => 150 do 
     background '#F00' 
     flow :margin => 5 do 
      button 'OK' 
      button 'Cancel' 
      button 'Ponies!' 
     end 
     end 
     @menu.leave do 
      break if @menu.nil? or @menu.hover? or @zone.hover? 
      @menu.remove 
      @menu = nil 
     end 
    end 
    end 

    @zone.leave do 
    break if @menu.nil? or @menu.hover? or @zone.hover? 
    @menu.remove 
    @menu = nil 
    end 
end 
関連する問題