Class: Cosmos::TlmDetailsDialog

Inherits:
DetailsDialog show all
Defined in:
lib/cosmos/gui/dialogs/tlm_details_dialog.rb

Constant Summary collapse

VALUE_UPDATE_PERIOD_MS =
1000
VALUE_TYPES =
[:RAW, :CONVERTED, :FORMATTED, :WITH_UNITS]

Instance Method Summary collapse

Methods inherited from DetailsDialog

#build_details_layout, #closeEvent, #reject, #show_conversion, #show_data_type, #show_endianness, #show_nil

Methods inherited from Qt::Dialog

#exec

Constructor Details

#initialize(parent, target_name, packet_name, item_name, packet = nil) ⇒ TlmDetailsDialog

Returns a new instance of TlmDetailsDialog.



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/cosmos/gui/dialogs/tlm_details_dialog.rb', line 25

def initialize(parent, target_name, packet_name, item_name, packet = nil)
  super(parent, target_name, packet_name, item_name)

  @item_array = [[@target_name, @packet_name, @item_name],
                 [@target_name, @packet_name, @item_name],
                 [@target_name, @packet_name, @item_name],
                 [@target_name, @packet_name, @item_name]]

  begin
    update = false
    if !packet
      update = true
      _, item = System.telemetry.packet_and_item(target_name, packet_name, item_name)
    else
      item = packet.get_item(item_name)
    end

    setWindowTitle("#{@target_name} #{@packet_name} #{@item_name} Details")

    layout = Qt::VBoxLayout.new
    layout.addWidget(Qt::Label.new(tr("#{target_name} #{packet_name} #{item_name}")))

    # Display the item values
    item_values = Qt::GroupBox.new(tr("Item Values"))

    values_layout = Qt::FormLayout.new
    @raw_value = Qt::LineEdit.new
    @raw_value.setReadOnly(true)
    values_layout.addRow(tr("Raw Value:"), @raw_value)
    @hex_raw_value = nil
    @hex_raw_num_digits = 0
    case item.data_type
    when :INT, :UINT
      if item.bit_size >= 0
        @hex_raw_value = Qt::LineEdit.new
        @hex_raw_value.setReadOnly(true)
        @hex_raw_num_digits = (((item.bit_size - 1) / 8) + 1) * 2
        values_layout.addRow(tr("Hex Raw Value:"), @hex_raw_value)
      end
    end
    @converted_value = Qt::LineEdit.new
    @converted_value.setReadOnly(true)
    values_layout.addRow(tr("Converted Value:"), @converted_value)
    @formatted_value = Qt::LineEdit.new
    @formatted_value.setReadOnly(true)
    values_layout.addRow(tr("Formatted Value:"), @formatted_value)
    @formatted_with_units_value = Qt::LineEdit.new
    @formatted_with_units_value.setReadOnly(true)
    values_layout.addRow(tr("Formatted with Units Value:"), @formatted_with_units_value)
    @limits_state = Qt::LineEdit.new
    @limits_state.setReadOnly(true)
    values_layout.addRow(tr("Limits State:"), @limits_state)

    item_values.setLayout(values_layout)
    layout.addWidget(item_values)

    if update
      @timer = Qt::Timer.new
      connect(@timer, SIGNAL('timeout()'), self, SLOT('value_update_timeout()'))
      @timer.method_missing(:start, VALUE_UPDATE_PERIOD_MS)
      value_update_timeout()
    else
      raw_value = packet.read(item_name, :RAW).to_s
      @raw_value.text = raw_value
      set_hex_value(raw_value) if @hex_raw_value
      @converted_value.text = packet.read(item_name, :CONVERTED).to_s
      @formatted_value.text = packet.read(item_name, :FORMATTED).to_s
      @formatted_with_units_value.text = packet.read(item_name, :WITH_UNITS).to_s
    end

    # Display the item details
    item_details = Qt::GroupBox.new(tr("Item Details"))
    item_details.setLayout(build_details_layout(item, :TLM))
    layout.addWidget(item_details)

    # Add the OK button
    ok = Qt::PushButton.new("Ok")
    connect(ok, SIGNAL('clicked()'), self, SLOT('close()'))
    if update
      connect(self, SIGNAL('finished(int)')) do |result|
        @timer.stop
      end
    end
    layout.addWidget(ok)

    self.setLayout(layout)
    self.show
    self.raise
  rescue DRb::DRbConnError
    # Just do nothing
  end
end

Instance Method Details

#value_update_timeoutObject



118
119
120
121
122
123
124
125
126
127
# File 'lib/cosmos/gui/dialogs/tlm_details_dialog.rb', line 118

def value_update_timeout
  begin
    # Gather updated values
    values, limits_states, limits_settings, limits_set = get_tlm_values(@item_array, VALUE_TYPES)
    update_limits_details(limits_settings, limits_set)
    update_text_fields(values, limits_states[0])
  rescue DRb::DRbConnError
    # Just do nothing
  end
end