#!/opt/QtPalmtop/bin/ruby -Ku

=begin

Ruby/QteとSQLite3/Rubyを組み合わせて使うテスト

=end

# 一応文字コードの指定
$KCODE = 'ut8'

require 'qte'
require 'qpe'
require 'sqlite3'
require 'kconv'

# 名前空間の適用
include Qte
include Qpe

# メインウィジェットをクラス定義
class MyWindow < QMainWindow

  # コンストラクタ
  def initialize
    super

    # QListView追加
    @lv = QListView.new(self)
    self.setCentralWidget(@lv)
    # 一つ目のColumn追加
    @lv.addColumn(tr('名前'), 200)
    # 二つ目のColumn追加
    @lv.addColumn(tr('アドレス'), 200)

    # データベースファイルが無ければフラグを立てる
    @new_flag = !File.exists?('test.db')

    # ファイルが無ければデータベース作成、
    # あれば開いてインスタンスdb生成
    db = SQLite3::Database.new( "test.db" )

    # 今回の実行直前までデータベースが無かった場合は
    if(@new_flag) then

      # テーブル定義SQL(ヒアドキュメント)
      db.type_translation = true
      sql = <<SQL
CREATE TABLE people (
id INTEGER PRIMARY KEY,
name TEXT,
address TEXT
);
SQL
      # SQL実行
      db.execute(sql)

      # 作ったテーブルに100回レコードを挿入
      (1..100).each do |i|
        # sqlite3はutf8ならマルチバイト文字を扱える
        # Ruby/Qteならソースはどうせutf8で書くので
        # この場合は別にtoutf8しなくてもOK
        sql = <<SQL
INSERT INTO people (name, address)
VALUES ('#{'名前'.toutf8 + sprintf("%03d",i.to_s)}',
'#{'アドレス'.toutf8}');
SQL
        # SQL実行
        db.execute(sql)

        end
    end

    # テーブルから全レコード抽出するSQL
    sql = "SELECT * FROM people"
    # sql文実行 / resに結果代入
    res = db.execute(sql)
    # res内のレコード数だけイテレータで繰り返し
    res.each do |m|
      # QListViewの中にアイテムを追加
      # 最初のColumnにはnameフィールドを
      # 2番目のColumnにはaddressフィールドを挿入
      QListViewItem.new(@lv, tr(m[1]),tr(m[2]))
    end
    db.close
  end
end

# DefaultCodecを設定するためだけの継承(必然性は無いです)
class MyApp < QPEApplication
  def initialize
    super([$0]+ARGV)
    self.setDefaultCodec(QTextCodec.codecForName('utf8'))
  end
end

# アプリケーションのインスタンス生成
a = MyApp.new
# ウィジェットのインスタンス生成
mw = MyWindow.new
# ウィジェットのインスタンスをMainWidgetに指定し、かつ表示
a.showMainWidget(mw)
# 実行
a.exec