#!ruby -Ks
require 'phi'
require 'rdb'

    ##
    ##	calc_field.rb
    ##
    ##
    ##	2002-02-27(水):二つめの add でエラーが出たので、バグフィックス。
    ##	データセットを閉じても残っているというのが怪しげ。
    ##	field_defs.update では駄目だった。
    ##
    ##	@dataset.add_calc_field( "AiteName", FT_STRING, 40 , 3)
    ##	@dataset.add_calc_field( "sel"     , FT_INTEGER, 0 , 0)
    ##
module RDB
  class DataSet
    def add_calc_field( fname, ftype, fsize, index=nil )
      old_active = self.active
      self.close
      if self.fields.count == 0
        self.open
        old = self.fields.collect{|f|[f.field_name,f.data_type,f.size]}
        self.close
        old.each{|d| RDB::Field.new( self, d[0] , d[1], d[2]) }
      end
      field = RDB::Field.new( self, fname, ftype, fsize )
      field.calculated = true
      field.index = index if index
      GC.start unless $NO_GC_FOR_INTERBASE
      self.open if old_active
      return field
    end
  end
end

if __FILE__ == $0
  include Phi
  form = Form.new
  form.width = SCREEN.width
  form.left = 0
  dataset = RDB::Table.new nil, 'biolife.db'
  dataset.database_name = 'DBDEMOS'
  dataset.add_calc_field( 'wamei', RDB::FT_STRING , 30 , 3)
  dataset.on_calc_fields = proc{ |ds|
    case ds["Common_name"].to_s
    when "Red Emperor"      ; s = "赤い皇帝？" 
    when "Blue Angelfish"   ; s = "青いエンジェルフィッシュ？" 
    else                    ; s = "知らない"
    end
    ds["wamei"]=s
  }
  dataset.open
  datasource = RDB::DataSource.new dataset
  grid = RDB::DBGrid.new form
  grid.data_source = datasource
  grid.align = AL_CLIENT
  form.show
  mainloop
end
