Class: RubyCurses::Variable

Inherits:
Object show all
Defined in:
lib/rbcurse/core/widgets/rwidget.rb

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

Since:

  • 1.2.0

Instance Method Summary collapse

Constructor Details

#initialize(value = "") ⇒ Variable

Returns a new instance of Variable.

Since:

  • 1.2.0



2584
2585
2586
2587
2588
2589
# File 'lib/rbcurse/core/widgets/rwidget.rb', line 2584

def initialize value=""
  @update_command = []
  @args = []
  @value = value
  @klass = value.class.to_s
end

Instance Method Details

#[](key) ⇒ Object

Since:

  • 1.2.0



2668
2669
2670
# File 'lib/rbcurse/core/widgets/rwidget.rb', line 2668

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. @ private

Since:

  • 1.2.0



2596
2597
2598
2599
2600
# File 'lib/rbcurse/core/widgets/rwidget.rb', line 2596

def add_dependent obj
  $log.debug " ADDING DEPENDE #{obj}"
  @dependents ||= []
  @dependents << obj
end

#get_value(val = nil) ⇒ Object

value of the variable

Since:

  • 1.2.0



2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
# File 'lib/rbcurse/core/widgets/rwidget.rb', line 2612

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

#inspectObject

Since:

  • 1.2.0



2665
2666
2667
# File 'lib/rbcurse/core/widgets/rwidget.rb', line 2665

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.

Since:

  • 1.2.0



2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
# File 'lib/rbcurse/core/widgets/rwidget.rb', line 2628

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

#sourceObject

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

Since:

  • 1.2.0



2673
2674
2675
# File 'lib/rbcurse/core/widgets/rwidget.rb', line 2673

def source
  @value
end

#to_sObject

Since:

  • 1.2.0



2676
2677
2678
# File 'lib/rbcurse/core/widgets/rwidget.rb', line 2676

def to_s
  inspect
end

#update_command(*args, &block) ⇒ Object Also known as: command

install trigger to call whenever a value is updated

Since:

  • 1.2.0



2604
2605
2606
2607
2608
# File 'lib/rbcurse/core/widgets/rwidget.rb', line 2604

def update_command *args, &block
  $log.debug "Variable: update command set " # #{args}"
  @update_command << block
  @args << args
end

#valueObject

Since:

  • 1.2.0



2661
2662
2663
2664
# File 'lib/rbcurse/core/widgets/rwidget.rb', line 2661

def value
  raise "Please use set_value for hash/array: #{@klass}" if @klass=='Hash' #or @klass=='Array'
  @value
end

#value=(val) ⇒ Object

Since:

  • 1.2.0



2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
# File 'lib/rbcurse/core/widgets/rwidget.rb', line 2651

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