靴で、最初は非表示のボタンを作成したいと思います。ボタンスタイルの一部として :hidden => true を渡し、作成後に @button.hide() を呼び出してみましたが、頑固に表示されたままです。
表示するまでボタンを作成しないことでこれを回避できましたが、それを使用するだけでなく、既に存在するかどうかを確認する必要があります。
現在はありません。シューズ、特にWindowsでは、ボタンの信頼性はまだかなり低くなっています。ボタンをスロットに配置し、スロットを非表示または表示することで問題を回避できますが、ボタンを1回クリックすると、ボタンが再び非表示にならない場合があります。
Shoes.app do
para 'This is some text.'
@flow = flow :width => 50, :hidden => true do
button 'a' do |btn|
alert 'Hello, World!'
end
end
button 'toggle' do
@flow.toggle
end
para 'Blah blah blah'
end
幸いなことに、スロットという方法があります。スロットにはクリックイベントを指定できます。これにより、スロットはボタンと同じように動作します。実際、スロットからかなりまともなボタンを作ることができます。
これが私が一緒に石畳にしたものです。このメソッドを使用して、pesto_button
フローに基づいて構築されたボタンを生成できます。背景として画像を使用する、変更可能なテキスト(幅を自動拡張する?)、オンザフライでスタイルを変更する機能など、ニーズに合わせて変更できます。
class PestoButton < Widget
def initialize (text, opts = {})
@border_color = opts[:border_color] || gray
@border_width = opts[:border_width] || 3
@color = opts[:up_color] || gainsboro
@click_color = opts[:down_color] || @border_color
@width = opts[:width] || 80
@click = block_given? ? Proc.new { yield } : nil
@text = text
@visible = true
@flow = flow :width => @width do
background @color
border @border_color, :strokewidth => @border_width
para @text, :align => 'center'
end
@flow.click do
@flow.clear
@flow.append do
background @click_color
border @border_color, :strokewidth => @border_width
para @text, :align => 'center'
end
end
@flow.release do
@flow.clear
@flow.append do
background @color
border @border_color, :strokewidth => @border_width
para @text, :align => 'center'
@click.call if @click
end
end
end
def click
@click = block_given? ? Proc.new { yield } : nil
end
def show
@flow.show
end
def toggle
@flow.toggle
end
def hide
@flow.hide
end
end
Shoes.app do
para 'This is some text.'
@btn = pesto_button 'Click me!' do
alert 'Hello, World!'
end
button 'toggle' do
@btn.toggle
end
button 'new block' do
@btn.click do
alert 'Goodbye, World!'
end
end
button 'no block' do
@btn.click #Clears the click method
end
para 'Blah blah blah'
end