Table
Tableはモデルの行データを、テキスト・画像・チェック・進捗・ボタンなどの列で表示します。
表示例
実行例
require "uing"
UIng.init
main_window = UIng::Window.new("Table Example", 400, 220, margined: true)
vbox = UIng::Box.new(:vertical, padded: true)
main_window.child = vbox
data = [
%w[Windows Microsoft],
%w[macOS Apple],
%w[Ubuntu Canonical],
]
model_handler = UIng::Table::Model::Handler.new do
num_columns { 2 }
column_type { |_column| UIng::Table::Value::Type::String }
num_rows { data.size }
cell_value { |row, column| UIng::Table::Value.new(data[row][column]) }
set_cell_value { |_row, _column, _value| }
end
table_model = UIng::Table::Model.new(model_handler)
table = UIng::Table.new(table_model) do
append_text_column("OS", 0, editable: :never)
append_text_column("Vendor", 1, editable: :never)
end
table.selection_mode = UIng::Table::Selection::Mode::ZeroOrOne
status = UIng::Label.new("Select a row")
table.on_selection_changed do |selection|
if selection.num_rows == 0
status.text = "No row selected"
else
row = selection.rows.first
status.text = "Selected: #{data[row][0]} by #{data[row][1]}"
end
end
vbox.append(table, true)
vbox.append(status)
main_window.show
main_window.on_closing do
# Detach and destroy the table before freeing its model.
vbox.delete(0)
table.destroy # Destroy table first
table_model.free # Then free model
UIng.quit
true
end
UIng.main
UIng.uninit
基本構成
Table::Model::Handlerがデータを提供し、Table::Modelを介してTableに表示します。初期化とウィンドウ作成は上の実行例を参照してください。
data = %w[Windows macOS Ubuntu]
handler = UIng::Table::Model::Handler.new do
num_columns { 1 }
column_type { |_column| UIng::Table::Value::Type::String }
num_rows { data.size }
cell_value { |row, _column| UIng::Table::Value.new(data[row]) }
set_cell_value { |_row, _column, _value| }
end
model = UIng::Table::Model.new(handler)
table = UIng::Table.new(model) do
append_text_column("OS", 0, editable: :never)
end
window.child = table
行・モデル列の番号は0始まりです。append_text_columnの0は表示するモデル列を指定します。モデルの列数と型は作成時に固定され、セル値は列の型に合わせます。
この章の進め方
このページでは最小構成を扱います。続くページで、モデルコールバックと値の所有権、列の種類・編集・選択、データ更新と破棄順を順に説明します。
- モデルとデータ供給: ModelとHandlerの役割、型、
Table::Valueの所有権 - 列・編集・選択: 列の追加、編集可能なセル、選択とクリックイベント
- 更新とライフタイム: 行通知と安全な解放




