設定ダイアログを楽して作れないかな

例えばこういうオブジェクトを用意して……

Person = Struct.new :name, :age, :kawaii
yukarin = Person.new 'Yukari', 17, true

p yukarin
#=> #<struct Person name="Yukari", age=17, kawaii=true>

どういう風に表示したいか表にして……

table = [[yukarin, :name,   :string],
         [yukarin, :age,    :spin],
         [yukarin, :kawaii, :toggle]]

ダイアログを走らせると……

dlg = GeneralSettingsDialog.new(nil, table: table)
dlg.show_all
dlg.run

こんな風に表示されて……

値を変えると……

データが変わる。

p yukarin
# => #<struct Person name="Yukari", age=38.0, kawaii=true>

データが Observable になっていればアプリケーションに設定をその場で波及させられる感じになったり(希望)。

数値の範囲とか、文字列のバリデーションとかを考えると複雑になってくるけど、ある程度枠組みがないと果てしなくごちゃごちゃ書いてしまいそうだ。