Class: Canis::Variable
Overview
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.
Instance Method Summary collapse
- #[](key) ⇒ Object
-
#add_dependent(obj) ⇒ Object
This is to ensure that change handlers for all dependent objects are called so they are updated.
-
#get_value(val = nil) ⇒ Object
value of the variable.
-
#initialize(value = "") ⇒ Variable
constructor
{{{.
- #inspect ⇒ Object
-
#set_value(val, key = "") ⇒ Object
update the value of this variable.
-
#source ⇒ Object
in order to run some method we don’t yet support.
- #to_s ⇒ Object
-
#update_command(*args, &block) ⇒ Object
(also: #command)
install trigger to call whenever a value is updated.
- #value ⇒ Object
- #value=(val) ⇒ Object
Constructor Details
#initialize(value = "") ⇒ Variable
{{{
2857 2858 2859 2860 2861 2862 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2857 def initialize value="" @update_command = [] @args = [] @value = value @klass = value.class.to_s end |
Instance Method Details
#[](key) ⇒ Object
2942 2943 2944 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2942 def [](key) @value[key] end |
#add_dependent(obj) ⇒ Object
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
2870 2871 2872 2873 2874 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2870 def add_dependent obj $log.debug " ADDING DEPENDE #{obj}" @dependents ||= [] @dependents << obj end |
#get_value(val = nil) ⇒ Object
value of the variable
2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2886 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 ⇒ Object
2939 2940 2941 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2939 def inspect @value.inspect end |
#set_value(val, key = "") ⇒ Object
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.
2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2902 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 ⇒ Object
in order to run some method we don’t yet support
2947 2948 2949 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2947 def source @value end |
#to_s ⇒ Object
2950 2951 2952 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2950 def to_s inspect end |
#update_command(*args, &block) ⇒ Object Also known as: command
install trigger to call whenever a value is updated
2878 2879 2880 2881 2882 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2878 def update_command *args, &block $log.debug "Variable: update command set " # #{args}" @update_command << block @args << args end |
#value ⇒ Object
2935 2936 2937 2938 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2935 def value raise "Please use set_value for hash/array: #{@klass}" if @klass=='Hash' #or @klass=='Array' @value end |
#value=(val) ⇒ Object
2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2925 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 |