class Canis::Variable

Like Tk's TkVariable, a simple proxy that can be passed to a widget. The widget will update the Variable. A variable can be used to link a field with a label or some other widget. This is the new version of Variable. Deleting old version on 2009-01-17 12:04

Example

x = Variable.new

If x is passed as the variable for a RadioButton group, then this keeps the value of the button that is on.

y = Variable.new false

z = Variable.new Hash.new

If z is passed as variable to create several Checkboxes, and each has the name property set, then this hash will contain the status of each checkbox with name as key.

Public Class Methods

new(value="") click to toggle source
# File lib/canis/core/widgets/rwidget.rb, line 2855
def initialize value=""
  @update_command = []
  @args = []
  @value = value
  @klass = value.class.to_s
end

Public Instance Methods

[](key) click to toggle source
# File lib/canis/core/widgets/rwidget.rb, line 2940
def [](key)
  @value[key]
end
add_dependent(obj) click to toggle source

This is to ensure that change handlers for all dependent objects are called so they are updated. This is called from text_variable property of some widgets. If you use one text_variable across objects, all will be updated auto. User does not need to call. NOTE: I have removed text_variable from widget to simplify, so this seems to be dead. @ private

# File lib/canis/core/widgets/rwidget.rb, line 2868
def add_dependent obj
  $log.debug " ADDING DEPENDE #{obj}"
  @dependents ||= []
  @dependents << obj
end
command(*args, &block)
Alias for: update_command
get_value(val=nil) click to toggle source

value of the variable

# File lib/canis/core/widgets/rwidget.rb, line 2884
def get_value val=nil
  if @klass == 'String'
    return @value
  elsif @klass == 'Hash'
    return @value[val]
  elsif @klass == 'Array'
    return @value[val]
  else
    return @value
  end
end
inspect() click to toggle source
# File lib/canis/core/widgets/rwidget.rb, line 2937
def inspect
  @value.inspect
end
set_value(val, key="") click to toggle source

update the value of this variable. 2008-12-31 18:35 Added source so one can identify multiple sources that are updating. Idea is that mutiple fields (e.g. checkboxes) can share one var and update a hash through it. Source would contain some code or key relatin to each field.

# File lib/canis/core/widgets/rwidget.rb, line 2900
def set_value val, key=""
  oldval = @value
  if @klass == 'String'
    @value = val
  elsif @klass == 'Hash'
    #$log.debug " Variable setting hash #{key} to #{val}"
    oldval = @value[key]
    @value[key]=val
  elsif @klass == 'Array'
    #$log.debug " Variable setting array #{key} to #{val}"
    oldval = @value[key]
    @value[key]=val
  else
    oldval = @value
    @value = val
  end
  return if @update_command.nil?
  @update_command.each_with_index do |comm, ix|
    comm.call(self, *@args[ix]) unless comm.nil?
  end
  @dependents.each {|d| d.fire_property_change(d, oldval, val) } unless @dependents.nil?
end
source() click to toggle source

in order to run some method we don't yet support

# File lib/canis/core/widgets/rwidget.rb, line 2945
def source
  @value
end
to_s() click to toggle source
# File lib/canis/core/widgets/rwidget.rb, line 2948
def to_s
  inspect
end
update_command(*args, &block) click to toggle source

install trigger to call whenever a value is updated @public called by user components

# File lib/canis/core/widgets/rwidget.rb, line 2876
def update_command *args, &block
  $log.debug "Variable: update command set " # #{args}"
  @update_command << block
  @args << args
end
Also aliased as: command
value() click to toggle source
# File lib/canis/core/widgets/rwidget.rb, line 2933
def value
  raise "Please use set_value for hash/array: #{@klass}" if @klass=='Hash' #or @klass=='Array'
  @value
end
value=(val) click to toggle source
# File lib/canis/core/widgets/rwidget.rb, line 2923
def value= (val)
  raise "Please use set_value for hash/array" if @klass=='Hash' or @klass=='Array'
  oldval = @value
  @value=val
  return if @update_command.nil?
  @update_command.each_with_index do |comm, ix|
    comm.call(self, *@args[ix]) unless comm.nil?
  end
  @dependents.each {|d| d.fire_property_change(d, oldval, val) } unless @dependents.nil?
end