Ruby Shoes を試しています。フォーカスを与えると編集可能になり、フォーカスを失うと再びテキストになるコントロールが必要です。これまでのところ、私は以下を持っています...
class NameBox < Shoes::Widget
def initialize(model, opts = {})
@model = model
@para = para(value)
self.click{
edit
}
self.keypress{|key|
display if key==:enter
}
end
def display
@ed && @ed.hide
@para.show
@para.text = value
end
def edit
@ed ||= edit_line(value) {|e|
@model.rename(e.text)
}
@para.hide
@ed.text = value
@ed.show
end
def value
@model.name
end
end
によって使われた
class Model
attr_reader :name
def initialize(name)
@name = name
end
def rename(new_name)
@name = new_name
end
end
Shoes.app do
@variable = Model.new("1 2 3")
stack do
10.times{ name_box(@variable) }
end
end
この実装は、複数のコントロールをクリックすると、両方とも編集ボックスになることを意味します。
私が望んでいたのは、コントロールを「表示」に戻すぼかしイベントでした。これは存在しないので、どのように実装しますか?
さらに多くのコントロールを作成し、それらすべてが「1 つの集中コントロール」というこの規則に従う必要があるとします。
**ボーナスポイントについては、私が入れられない理由を説明してください:
@ed ||= edit_line(value) {|e|
@model.rename(e.text)
}
@ed.hide()
初期化して @ed を非表示にします。