Class: Cosmos::CanvasvalueWidget

Inherits:
Object
  • Object
show all
Includes:
Widget
Defined in:
lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb

Instance Attribute Summary

Attributes included from Widget

#item, #item_name, #limits_set, #limits_state, #packet, #packet_name, #polling_period, #screen, #settings, #target_name, #value, #value_type

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Widget

#context_menu, #get_tooltip_text, included, #set_setting, #set_subsetting, #shutdown, #update_widget

Constructor Details

#initialize(parent_layout, target_name, packet_name, item_name, value_type = :RAW) ⇒ CanvasvalueWidget

Returns a new instance of CanvasvalueWidget.



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb', line 18

def initialize(parent_layout, target_name, packet_name, item_name, value_type = :RAW)
  super(target_name, packet_name, item_name, value_type)
  @comparison = 'EQ'
  @comparison_value = 1
  @items = []
  @item_settings = [['and', '==', 1]] # set the default settings
  @values = [0] # initialize to a value
  @items << [@target_name, @packet_name, @item_name] # grab the default item
  @parent_layout = parent_layout
  parent_layout.add_repaint(self)
end

Class Method Details

.takes_value?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb', line 30

def self.takes_value?
  return true
end

Instance Method Details

#draw_widget(draw_context, on_state) ⇒ Object

This is an abstract function which must be overriden



67
68
69
# File 'lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb', line 67

def draw_widget(draw_context, on_state)
  raise 'Override draw_widget to make this class work!'
end

#paint(painter) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb', line 51

def paint(painter)
  eval_string = "1"
  # This code uses the booleans set by the process_settings function and evaluates it to logically determine
  # if the item should be drawn on the canvas as "on" or "off".
  begin
    @item_settings.each_with_index do |item,index|
      eval_string << " " << item[0].to_s << " (" << @values[index].to_s << " " << item[1].to_s << " " << item[2].to_s << ")"
    end
    on = eval(eval_string)
  rescue => err
    Cosmos.handle_fatal_exception(err)
  end
  draw_widget(painter, on)
end

#process_settingsObject



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb', line 71

def process_settings
  super
  @settings.each do |setting_name, setting_values|
    begin
      case setting_name
      when 'VALUE_EQ'
        @item_settings[0] = ['and', '==', setting_values[0]]
      when 'VALUE_GT'
        @item_settings[0] = ['and', '>', setting_values[0]]
      when 'VALUE_GTEQ'
        @item_settings[0] = ['and', '>=', setting_values[0]]
      when 'VALUE_LT'
        @item_settings[0] = ['and', '<', setting_values[0]]
      when 'VALUE_LTEQ'
        @item_settings[0] = ['and', '<=', setting_values[0]]
      # TLM_AND allows a telemetry item to be dependant on another item for its state
      when 'TLM_AND'
        @items << [setting_values[0], setting_values[1], setting_values[2]]
        @values << 0
        set_item_settings('and', setting_values[3], setting_values[4])
      # TLM_OR allows a telemetry item to be dependant on another item for its state
      when 'TLM_OR'
        @items << [setting_values[0], setting_values[1], setting_values[2]]
        @values << 0
        set_item_settings('or', setting_values[3], setting_values[4])
      end
    rescue => err
      puts "Error Processing Settings!: #{err}"
    end
  end
end

#set_item_settings(and_or_string, type, value) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb', line 103

def set_item_settings(and_or_string, type, value)
  # Handle nil or empty input variables
  and_or_string = 'and' if and_or_string.nil? or and_or_string.empty?
  value = 1 if value.nil? or value.empty?
  type = 'VALUE_EQ' if type.nil? or type.empty?

  case type
    when 'VALUE_EQ'
      @item_settings << [and_or_string, '==',value]
    when 'VALUE_GT'
      @item_settings << [and_or_string, '>',value]
    when 'VALUE_GTEQ'
      @item_settings << [and_or_string, '>=',value]
    when 'VALUE_LT'
      @item_settings << [and_or_string, '<',value]
    when 'VALUE_LTEQ'
      @item_settings << [and_or_string, '<=',value]
  end
end

#value=(data) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb', line 34

def value=(data)
  # If we have multiple items then we need to explicitly get all the items
  if @items.length > 1
    values, _, _, _ = get_tlm_values(@items, @value_type)
    if values != @values
      @values = values
      @parent_layout.update_widget
    end
  # If we only have one item we just use the passed in data
  else
    if @values[0] != data
      @values[0] = data
      @parent_layout.update_widget
    end
  end
end