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
{{{
2849 2850 2851 2852 2853 2854 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2849 def initialize value="" @update_command = [] @args = [] @value = value @klass = value.class.to_s end |
Instance Method Details
#[](key) ⇒ Object
2934 2935 2936 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2934 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
2862 2863 2864 2865 2866 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2862 def add_dependent obj $log.debug " ADDING DEPENDE #{obj}" @dependents ||= [] @dependents << obj end |
#get_value(val = nil) ⇒ Object
value of the variable
2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2878 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
2931 2932 2933 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2931 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.
2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2894 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
2939 2940 2941 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2939 def source @value end |
#to_s ⇒ Object
2942 2943 2944 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2942 def to_s inspect end |
#update_command(*args, &block) ⇒ Object Also known as: command
install trigger to call whenever a value is updated
2870 2871 2872 2873 2874 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2870 def update_command *args, &block $log.debug "Variable: update command set " # #{args}" @update_command << block @args << args end |
#value ⇒ Object
2927 2928 2929 2930 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2927 def value raise "Please use set_value for hash/array: #{@klass}" if @klass=='Hash' #or @klass=='Array' @value end |
#value=(val) ⇒ Object
2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 |
# File 'lib/canis/core/widgets/rwidget.rb', line 2917 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 |