lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb in cosmos-3.5.0 vs lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb in cosmos-3.5.1

- old
+ new

@@ -1,116 +1,116 @@ -# encoding: ascii-8bit - -# Copyright 2014 Ball Aerospace & Technologies Corp. -# All Rights Reserved. -# -# This program is free software; you can modify and/or redistribute it -# under the terms of the GNU General Public License -# as published by the Free Software Foundation; version 3 with -# attribution addendums as found in the LICENSE.txt - -require 'cosmos/tools/tlm_viewer/widgets/widget' - -module Cosmos - - # The MultiWidget module must be included after the Widget module by all widget - # classes that consist of multiple other COSMOS widgets. It overrides methods - # in the Widget module to support setting all the subwidgets that comprise - # the top level widget. - module MultiWidget - attr_accessor :widgets - - def initialize(target_name = nil, packet_name = nil, item_name = nil, value_type = :CONVERTED, *args) - super(target_name, packet_name, item_name, value_type, *args) - @widgets = [] - end - - def value=(data) - super(data) - @widgets.each do |widget| - widget.value = data - end - end - - def screen=(screen) - super(screen) - @widgets.each do |widget| - widget.screen = screen - end - end - - def polling_period=(polling_period) - super(polling_period) - @widgets.each do |widget| - widget.polling_period = polling_period - end - end - - def limits_state=(limits_state) - super(limits_state) - @widgets.each do |widget| - widget.limits_state = limits_state - end - end - - def limits_set=(limits_set) - super(limits_set) - @widgets.each do |widget| - widget.limits_set = limits_set - end - end - - def set_setting(setting_name, setting_values) - super(setting_name, setting_values) - case setting_name.upcase - when 'GRAY_RATE', 'GREY_RATE', 'MIN_GRAY', 'MIN_GREY', - 'GRAY_TOLERANCE', 'GREY_TOLERANCE', 'ENABLE_AGING', 'COLORBLIND', - 'TREND_SECONDS' - # Automatically pass these down to all subwidgets - @widgets.each do |widget| - widget.set_setting(setting_name, setting_values) - if widget.respond_to? :widgets - widget.widgets.each {|subwidget| subwidget.set_setting(setting_name, setting_values) } - end - end - end - end - - def set_subsetting(widget_index, setting_name, setting_values) - if widget_index.to_s.upcase == 'ALL' - @widgets.each do |widget| - widget.set_setting(setting_name, setting_values) - if widget.respond_to? :widgets - widget.widgets.each {|subwidget| subwidget.set_setting(setting_name, setting_values) } - end - end - else - # Accessing multiwidget subwidgets of widgets is through colon separated indexes - indexes = widget_index.split(':') - widget_index = Integer(indexes[0]) - widget = @widgets[widget_index] - if widget - case indexes.length - when 1 - # If there is a single index we just set this widget - widget.set_setting(setting_name, setting_values) - when 2 - # If there are exactly 2 indexes we set the subwidget directly - widget.widgets[Integer(indexes[1])].set_setting(setting_name, setting_values) - else - # If there were more than 2 values we need to pass them down together - # and let recursion push them to the individual widgets - widget.widgets[Integer(indexes[1])].set_subsetting(indexes[2..-1].join(':'), setting_name, setting_values) - end - end - end - end - - def process_settings - super() - @widgets.each do |widget| - widget.process_settings - end - end - end - -end # module Cosmos +# encoding: ascii-8bit + +# Copyright 2014 Ball Aerospace & Technologies Corp. +# All Rights Reserved. +# +# This program is free software; you can modify and/or redistribute it +# under the terms of the GNU General Public License +# as published by the Free Software Foundation; version 3 with +# attribution addendums as found in the LICENSE.txt + +require 'cosmos/tools/tlm_viewer/widgets/widget' + +module Cosmos + + # The MultiWidget module must be included after the Widget module by all widget + # classes that consist of multiple other COSMOS widgets. It overrides methods + # in the Widget module to support setting all the subwidgets that comprise + # the top level widget. + module MultiWidget + attr_accessor :widgets + + def initialize(target_name = nil, packet_name = nil, item_name = nil, value_type = :CONVERTED, *args) + super(target_name, packet_name, item_name, value_type, *args) + @widgets = [] + end + + def value=(data) + super(data) + @widgets.each do |widget| + widget.value = data + end + end + + def screen=(screen) + super(screen) + @widgets.each do |widget| + widget.screen = screen + end + end + + def polling_period=(polling_period) + super(polling_period) + @widgets.each do |widget| + widget.polling_period = polling_period + end + end + + def limits_state=(limits_state) + super(limits_state) + @widgets.each do |widget| + widget.limits_state = limits_state + end + end + + def limits_set=(limits_set) + super(limits_set) + @widgets.each do |widget| + widget.limits_set = limits_set + end + end + + def set_setting(setting_name, setting_values) + super(setting_name, setting_values) + case setting_name.upcase + when 'GRAY_RATE', 'GREY_RATE', 'MIN_GRAY', 'MIN_GREY', + 'GRAY_TOLERANCE', 'GREY_TOLERANCE', 'ENABLE_AGING', 'COLORBLIND', + 'TREND_SECONDS' + # Automatically pass these down to all subwidgets + @widgets.each do |widget| + widget.set_setting(setting_name, setting_values) + if widget.respond_to? :widgets + widget.widgets.each {|subwidget| subwidget.set_setting(setting_name, setting_values) } + end + end + end + end + + def set_subsetting(widget_index, setting_name, setting_values) + if widget_index.to_s.upcase == 'ALL' + @widgets.each do |widget| + widget.set_setting(setting_name, setting_values) + if widget.respond_to? :widgets + widget.widgets.each {|subwidget| subwidget.set_setting(setting_name, setting_values) } + end + end + else + # Accessing multiwidget subwidgets of widgets is through colon separated indexes + indexes = widget_index.split(':') + widget_index = Integer(indexes[0]) + widget = @widgets[widget_index] + if widget + case indexes.length + when 1 + # If there is a single index we just set this widget + widget.set_setting(setting_name, setting_values) + when 2 + # If there are exactly 2 indexes we set the subwidget directly + widget.widgets[Integer(indexes[1])].set_setting(setting_name, setting_values) + else + # If there were more than 2 values we need to pass them down together + # and let recursion push them to the individual widgets + widget.widgets[Integer(indexes[1])].set_subsetting(indexes[2..-1].join(':'), setting_name, setting_values) + end + end + end + end + + def process_settings + super() + @widgets.each do |widget| + widget.process_settings + end + end + end + +end # module Cosmos