Ruby/GtkでGtk::TreeViewを使ったサンプルとか少なかったので自分用のメモです。
注: MVCページを新たに作成予定?
以下、とりあえず動いたサンプルコードです。
現時点(2008-08-14)ではRubyは久しぶりなのでいろいろと変な事をやっていると思います。Gtk::TreeViewを継承したTVクラスを作成してその中でModel作ったりとか…
実際にはGtk::Windowを継承したMainWindowクラス内でモデルを作成してビューを作成して関連付ける。のようにするのが正しそうなんですが…次回からはそうやってコーディングします。
1 #!/usr/bin/env ruby 2 3 require 'gtk2' 4 5 # TreeViewクラス 6 class TV < Gtk::TreeView 7 # カラム 8 COLUMNS = ["行", "データ"] 9 10 # コンストラクタ 11 def initialize() 12 # モデルの作成 13 @model = Gtk::ListStore.new(Integer,String) 14 # TreeViewの作成 15 super @model 16 # カラムの設定 リサイズ可能にする 17 crText = Gtk::CellRendererText.new 18 COLUMNS.each_with_index do |name, idx| 19 col = Gtk::TreeViewColumn.new name, crText, :text => idx 20 col.resizable = true 21 append_column col 22 end 23 # データの設定 24 0.upto(100) do |row| 25 iter = @model.append 26 iter[0] = row 27 iter[1] = "データ#{row}" 28 end 29 end 30 end 31 32 # MainWindow 33 class MainWindow < Gtk::Window 34 # コンストラクタ 35 def initialize() 36 super 37 set_title "TreeViewのテスト" 38 set_default_size 100, 100 39 # ScrolledWindow 40 sw = Gtk::ScrolledWindow.new 41 sw.set_policy Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC 42 # TreeView(TV)を作成して追加 43 tv = TV.new 44 add(sw.add(tv)) 45 # シグナル 46 signal_connect "destroy" do 47 Gtk.main_quit 48 end 49 end 50 end 51 52 # 53 w = MainWindow.new 54 w.show_all 55 Gtk.main
このソース、コピペして使いにくい。ちゃんとコピペできるようにこっちへ再アップしました→Ruby Hpricot + GNU Source-highlight
実行結果は左のような感じです。デフォルトサイズ100×100はちょっと小さすぎたので実行後にリサイズしてスナップショットを撮っています。