cosmos 3.6.3 → 3.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Manifest.txt +10 -0
- data/data/crc.txt +22 -13
- data/demo/config/data/crc.txt +2 -1
- data/demo/config/targets/INST/screens/limits.txt +51 -0
- data/demo/config/targets/INST/screens/other.txt +0 -5
- data/ext/cosmos/ext/array/array.c +6 -6
- data/ext/cosmos/ext/buffered_file/buffered_file.c +10 -10
- data/ext/cosmos/ext/config_parser/config_parser.c +10 -10
- data/ext/cosmos/ext/cosmos_io/cosmos_io.c +3 -3
- data/ext/cosmos/ext/crc/crc.c +6 -6
- data/ext/cosmos/ext/line_graph/line_graph.c +20 -20
- data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +4 -4
- data/ext/cosmos/ext/packet/packet.c +18 -23
- data/ext/cosmos/ext/platform/platform.c +1 -1
- data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +1 -1
- data/ext/cosmos/ext/structure/structure.c +34 -29
- data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +1 -1
- data/ext/cosmos/ext/telemetry/telemetry.c +33 -33
- data/lib/cosmos/gui/line_graph/line_graph.rb +25 -1
- data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +2 -2
- data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +64 -14
- data/lib/cosmos/gui/line_graph/line_graph_popups.rb +2 -1
- data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +9 -3
- data/lib/cosmos/gui/line_graph/line_graph_script.rb +64 -9
- data/lib/cosmos/gui/line_graph/lines.rb +24 -11
- data/lib/cosmos/interfaces/udp_interface.rb +8 -3
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +1 -1
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +8 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +79 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitscolumn_widget.rb +38 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +1 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb +39 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/limits_widget.rb +103 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +77 -147
- data/lib/cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb +102 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb +108 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/rangecolumn_widget.rb +57 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitscolumn_widget.rb +37 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangecolumn_widget.rb +37 -0
- data/lib/cosmos/version.rb +5 -5
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +33 -4
- metadata +12 -2
@@ -0,0 +1,38 @@
|
|
1
|
+
# encoding: ascii-8bit
|
2
|
+
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
4
|
+
# All Rights Reserved.
|
5
|
+
#
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
7
|
+
# under the terms of the GNU General Public License
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
10
|
+
|
11
|
+
require 'cosmos/tools/tlm_viewer/widgets/widget'
|
12
|
+
require 'cosmos/tools/tlm_viewer/widgets/multi_widget'
|
13
|
+
require 'cosmos/tools/tlm_viewer/widgets/labelvalue_widget'
|
14
|
+
require 'cosmos/tools/tlm_viewer/widgets/limitsbar_widget'
|
15
|
+
|
16
|
+
module Cosmos
|
17
|
+
|
18
|
+
class LabelvaluelimitscolumnWidget < Qt::Widget
|
19
|
+
include Widget
|
20
|
+
include MultiWidget
|
21
|
+
|
22
|
+
def initialize(parent_layout, target_name, packet_name, item_name, value_type = :WITH_UNITS, characters = 12)
|
23
|
+
super(target_name, packet_name, item_name, value_type)
|
24
|
+
setLayout(Qt::VBoxLayout.new())
|
25
|
+
layout.setSpacing(1)
|
26
|
+
layout.setContentsMargins(0,0,0,0)
|
27
|
+
@widgets << LabelWidget.new(layout, item_name.to_s)
|
28
|
+
@widgets << LimitscolumnWidget.new(layout, target_name, packet_name, item_name, value_type)
|
29
|
+
@widgets << ValueWidget.new(layout, target_name, packet_name, item_name, value_type, characters)
|
30
|
+
parent_layout.addWidget(self) if parent_layout
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.takes_value?
|
34
|
+
return true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end # module Cosmos
|
@@ -19,7 +19,7 @@ module Cosmos
|
|
19
19
|
include Widget
|
20
20
|
include MultiWidget
|
21
21
|
|
22
|
-
def initialize
|
22
|
+
def initialize(parent_layout, target_name, packet_name, item_name, low_value, high_value, value_type = :WITH_UNITS, characters = 12, width = 160, height = 25)
|
23
23
|
super(target_name, packet_name, item_name, value_type)
|
24
24
|
setLayout(Qt::HBoxLayout.new())
|
25
25
|
layout.setSpacing(1)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: ascii-8bit
|
2
|
+
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
4
|
+
# All Rights Reserved.
|
5
|
+
#
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
7
|
+
# under the terms of the GNU General Public License
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
10
|
+
|
11
|
+
require 'cosmos/tools/tlm_viewer/widgets/widget'
|
12
|
+
require 'cosmos/tools/tlm_viewer/widgets/multi_widget'
|
13
|
+
require 'cosmos/tools/tlm_viewer/widgets/label_widget'
|
14
|
+
require 'cosmos/tools/tlm_viewer/widgets/value_widget'
|
15
|
+
require 'cosmos/tools/tlm_viewer/widgets/rangecolumn_widget'
|
16
|
+
|
17
|
+
module Cosmos
|
18
|
+
|
19
|
+
class LabelvaluerangecolumnWidget < Qt::Widget
|
20
|
+
include Widget
|
21
|
+
include MultiWidget
|
22
|
+
|
23
|
+
def initialize(parent_layout, target_name, packet_name, item_name, low_value, high_value, value_type = :WITH_UNITS, characters = 8, width = 30, height = 100)
|
24
|
+
super(target_name, packet_name, item_name, value_type)
|
25
|
+
setLayout(Qt::VBoxLayout.new())
|
26
|
+
layout.setSpacing(1)
|
27
|
+
layout.setContentsMargins(0,0,0,0)
|
28
|
+
@widgets << LabelWidget.new(layout, item_name)
|
29
|
+
@widgets << RangecolumnWidget.new(layout, target_name, packet_name, item_name, low_value, high_value, value_type, width, height)
|
30
|
+
@widgets << ValueWidget.new(layout, target_name, packet_name, item_name, value_type, characters)
|
31
|
+
parent_layout.addWidget(self) if parent_layout
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.takes_value?
|
35
|
+
return true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end # module Cosmos
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# encoding: ascii-8bit
|
2
|
+
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
4
|
+
# All Rights Reserved.
|
5
|
+
#
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
7
|
+
# under the terms of the GNU General Public License
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
10
|
+
|
11
|
+
require 'ostruct'
|
12
|
+
require 'cosmos/tools/tlm_viewer/widgets/widget'
|
13
|
+
|
14
|
+
module Cosmos
|
15
|
+
|
16
|
+
# This class is a common base class for LimitsbarWidget and
|
17
|
+
# LimitscolumnWidget and should not be instantiated
|
18
|
+
class LimitsWidget < Qt::Label
|
19
|
+
include Widget
|
20
|
+
|
21
|
+
def initialize(parent_layout, target_name, packet_name, item_name, value_type, width, height)
|
22
|
+
super(target_name, packet_name, item_name, value_type)
|
23
|
+
@value_type = :CONVERTED if @value_type == :WITH_UNITS
|
24
|
+
@width = width.to_i
|
25
|
+
@height = height.to_i
|
26
|
+
@value = 0
|
27
|
+
@x_pad = 6
|
28
|
+
@y_pad = 6
|
29
|
+
@bar_width = @width - (2 * @x_pad)
|
30
|
+
@bar_height = @height - (2 * @y_pad)
|
31
|
+
@painter = nil
|
32
|
+
setFixedSize(width.to_i, height.to_i)
|
33
|
+
parent_layout.addWidget(self) if parent_layout
|
34
|
+
end
|
35
|
+
|
36
|
+
def value=(data)
|
37
|
+
@value = data.to_f
|
38
|
+
update()
|
39
|
+
end
|
40
|
+
|
41
|
+
def paintEvent(event)
|
42
|
+
begin
|
43
|
+
return if @painter
|
44
|
+
@painter = Qt::Painter.new(self)
|
45
|
+
# Seems like on initialization sometimes we get some weird bad conditions so check for them
|
46
|
+
if @painter.isActive and @painter.paintEngine
|
47
|
+
paint_implementation(@painter)
|
48
|
+
end
|
49
|
+
@painter.dispose
|
50
|
+
@painter = nil
|
51
|
+
rescue Exception => err
|
52
|
+
Cosmos.handle_fatal_exception(err)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def get_limits
|
57
|
+
limits = nil
|
58
|
+
limits_values = @item.limits.values
|
59
|
+
if limits_values
|
60
|
+
limits = limits_values[@limits_set]
|
61
|
+
limits = limits_values[:DEFAULT] unless limits
|
62
|
+
end
|
63
|
+
limits
|
64
|
+
end
|
65
|
+
|
66
|
+
def calculate_widths(limits, length)
|
67
|
+
red_low = limits[0]
|
68
|
+
yellow_low = limits[1]
|
69
|
+
yellow_high = limits[2]
|
70
|
+
red_high = limits[3]
|
71
|
+
green_low = limits[4]
|
72
|
+
green_high = limits[5]
|
73
|
+
|
74
|
+
widths = OpenStruct.new
|
75
|
+
# Calculate sizes of limits sections
|
76
|
+
widths.red_low = (0.1 * length).round
|
77
|
+
widths.red_high = (0.1 * length).round
|
78
|
+
|
79
|
+
inner_value_range = red_high - red_low
|
80
|
+
|
81
|
+
widths.yellow_low = ((yellow_low - red_low) / inner_value_range * 0.8 * length).round
|
82
|
+
widths.yellow_high = ((red_high - yellow_high) / inner_value_range * 0.8 * length).round
|
83
|
+
|
84
|
+
if green_high
|
85
|
+
widths.green_low = ((green_low - yellow_low) / inner_value_range * 0.8 * length).round
|
86
|
+
widths.green_high = ((yellow_high - green_high) / inner_value_range * 0.8 * length).round
|
87
|
+
widths.blue = length - widths.red_low - widths.yellow_low - widths.green_low -
|
88
|
+
widths.green_high - widths.yellow_high - widths.red_high
|
89
|
+
else
|
90
|
+
widths.green = length - widths.red_low - widths.yellow_low -
|
91
|
+
widths.yellow_high - widths.red_high
|
92
|
+
end
|
93
|
+
widths
|
94
|
+
end
|
95
|
+
|
96
|
+
protected
|
97
|
+
|
98
|
+
def additional_drawing(dc)
|
99
|
+
# Do nothing
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
end # module Cosmos
|
@@ -8,170 +8,100 @@
|
|
8
8
|
# as published by the Free Software Foundation; version 3 with
|
9
9
|
# attribution addendums as found in the LICENSE.txt
|
10
10
|
|
11
|
-
require 'cosmos/tools/tlm_viewer/widgets/
|
11
|
+
require 'cosmos/tools/tlm_viewer/widgets/limits_widget'
|
12
12
|
|
13
13
|
module Cosmos
|
14
14
|
|
15
|
-
class LimitsbarWidget <
|
16
|
-
include Widget
|
15
|
+
class LimitsbarWidget < LimitsWidget
|
17
16
|
|
18
17
|
def initialize(parent_layout, target_name, packet_name, item_name, value_type = :CONVERTED, width = 160, height = 25)
|
19
|
-
super(target_name, packet_name, item_name, value_type)
|
20
|
-
@value_type = :CONVERTED if @value_type == :WITH_UNITS
|
21
|
-
@width = width.to_i
|
22
|
-
@height = height.to_i
|
23
|
-
@value = 0
|
24
|
-
@x_pad = 6
|
25
|
-
@y_pad = 6
|
26
|
-
@bar_width = @width - (2 * @x_pad)
|
27
|
-
@bar_height = @height - (2 * @y_pad)
|
28
|
-
@painter = nil
|
29
|
-
setFixedSize(width.to_i, height.to_i)
|
30
|
-
parent_layout.addWidget(self) if parent_layout
|
18
|
+
super(parent_layout, target_name, packet_name, item_name, value_type, width, height)
|
31
19
|
end
|
32
20
|
|
33
21
|
def LimitsbarWidget.takes_value?
|
34
22
|
return true
|
35
23
|
end
|
36
24
|
|
37
|
-
def value= (data)
|
38
|
-
@value = data.to_f
|
39
|
-
update()
|
40
|
-
end
|
41
|
-
|
42
|
-
def paintEvent(event)
|
43
|
-
begin
|
44
|
-
return if @painter
|
45
|
-
@painter = Qt::Painter.new(self)
|
46
|
-
# Seems like on initialization sometimes we get some weird bad conditions so check for them
|
47
|
-
if @painter.isActive and @painter.paintEngine
|
48
|
-
paint_implementation(@painter)
|
49
|
-
end
|
50
|
-
@painter.dispose
|
51
|
-
@painter = nil
|
52
|
-
rescue Exception => err
|
53
|
-
Cosmos.handle_fatal_exception(err)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
25
|
def paint_implementation(dc)
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
26
|
+
limits = get_limits()
|
27
|
+
return unless limits
|
28
|
+
|
29
|
+
widths = calculate_widths(limits, @bar_width)
|
30
|
+
|
31
|
+
# Set starting points
|
32
|
+
x_pos = @x_pad
|
33
|
+
y_pos = @y_pad
|
34
|
+
|
35
|
+
# Draw RED_LOW bar
|
36
|
+
dc.addRectColorFill(x_pos, y_pos, widths.red_low, @bar_height, 'red')
|
37
|
+
dc.addRectColor(x_pos, y_pos, widths.red_low, @bar_height)
|
38
|
+
x_pos += widths.red_low
|
39
|
+
|
40
|
+
# Draw YELLOW_LOW bar
|
41
|
+
dc.addRectColorFill(x_pos, y_pos, widths.yellow_low, @bar_height, 'yellow')
|
42
|
+
dc.addRectColor(x_pos, y_pos, widths.yellow_low, @bar_height)
|
43
|
+
x_pos += widths.yellow_low
|
44
|
+
|
45
|
+
if widths.green_high
|
46
|
+
# Draw GREEN_LOW bar
|
47
|
+
dc.addRectColorFill(x_pos, y_pos, widths.green_low, @bar_height, 'lime')
|
48
|
+
dc.addRectColor(x_pos, y_pos, widths.green_low, @bar_height)
|
49
|
+
x_pos += widths.green_low
|
50
|
+
|
51
|
+
# Draw BLUE bar
|
52
|
+
dc.addRectColorFill(x_pos, y_pos, widths.blue, @bar_height, 'dodgerblue')
|
53
|
+
dc.addRectColor(x_pos, y_pos, widths.blue, @bar_height)
|
54
|
+
x_pos += widths.blue
|
55
|
+
|
56
|
+
# Draw GREEN_HIGH bar
|
57
|
+
dc.addRectColorFill(x_pos, y_pos, widths.green_high, @bar_height, 'lime')
|
58
|
+
dc.addRectColor(x_pos, y_pos, widths.green_high, @bar_height)
|
59
|
+
x_pos += widths.green_high
|
74
60
|
else
|
75
|
-
|
61
|
+
# Draw GREEN bar
|
62
|
+
dc.addRectColorFill(x_pos, y_pos, widths.green, @bar_height, 'lime')
|
63
|
+
dc.addRectColor(x_pos, y_pos, widths.green, @bar_height)
|
64
|
+
x_pos += widths.green
|
76
65
|
end
|
77
66
|
|
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
|
-
# Draw YELLOW_LOW bar
|
106
|
-
dc.addRectColorFill(x_pos, y_pos, yellow_low_width, @bar_height, 'yellow')
|
107
|
-
dc.addRectColor(x_pos, y_pos, yellow_low_width, @bar_height)
|
108
|
-
x_pos += yellow_low_width
|
109
|
-
|
110
|
-
if green_high
|
111
|
-
# Draw GREEN_LOW bar
|
112
|
-
dc.addRectColorFill(x_pos, y_pos, green_low_width, @bar_height, 'lime')
|
113
|
-
dc.addRectColor(x_pos, y_pos, green_low_width, @bar_height)
|
114
|
-
x_pos += green_low_width
|
115
|
-
|
116
|
-
# Draw BLUE bar
|
117
|
-
dc.addRectColorFill(x_pos, y_pos, blue_width, @bar_height, 'dodgerblue')
|
118
|
-
dc.addRectColor(x_pos, y_pos, blue_width, @bar_height)
|
119
|
-
x_pos += blue_width
|
120
|
-
|
121
|
-
# Draw GREEN_HIGH bar
|
122
|
-
dc.addRectColorFill(x_pos, y_pos, green_high_width, @bar_height, 'lime')
|
123
|
-
dc.addRectColor(x_pos, y_pos, green_high_width, @bar_height)
|
124
|
-
x_pos += green_high_width
|
125
|
-
else
|
126
|
-
# Draw GREEN bar
|
127
|
-
dc.addRectColorFill(x_pos, y_pos, green_width, @bar_height, 'lime')
|
128
|
-
dc.addRectColor(x_pos, y_pos, green_width, @bar_height)
|
129
|
-
x_pos += green_width
|
130
|
-
end
|
131
|
-
|
132
|
-
# Draw YELLOW_HIGH bar
|
133
|
-
dc.addRectColorFill(x_pos, y_pos, yellow_high_width, @bar_height, 'yellow')
|
134
|
-
dc.addRectColor(x_pos, y_pos, yellow_high_width, @bar_height)
|
135
|
-
x_pos += yellow_high_width
|
136
|
-
|
137
|
-
# Draw RED_HIGH bar
|
138
|
-
dc.addRectColorFill(x_pos, y_pos, red_high_width, @bar_height, 'red')
|
139
|
-
dc.addRectColor(x_pos, y_pos, red_high_width, @bar_height)
|
140
|
-
x_pos += red_high_width
|
141
|
-
|
142
|
-
# Draw line at current value
|
143
|
-
@bar_scale = (red_high - red_low) / 0.8
|
144
|
-
@low_value = red_low - 0.1 * @bar_scale
|
145
|
-
@high_value = red_high + 0.1 * @bar_scale
|
146
|
-
|
147
|
-
@line_pos = (@x_pad + (@value - @low_value) / @bar_scale * @bar_width).to_i
|
148
|
-
if @line_pos < @x_pad
|
149
|
-
@line_pos = @x_pad
|
150
|
-
end
|
151
|
-
if @line_pos > @x_pad + @bar_width
|
152
|
-
@line_pos = @bar_width + @x_pad
|
153
|
-
end
|
154
|
-
|
155
|
-
dc.addLineColor(@line_pos, @y_pad - 3, @line_pos, @y_pad + @bar_height + 3)
|
156
|
-
|
157
|
-
# Draw triangle above current value line
|
158
|
-
top_triangle = Qt::Polygon.new(3)
|
159
|
-
top_triangle.setPoint(0, @line_pos, @y_pad - 1)
|
160
|
-
top_triangle.setPoint(1, @line_pos-5, @y_pad - 6)
|
161
|
-
top_triangle.setPoint(2, @line_pos+5, @y_pad - 6)
|
162
|
-
dc.setBrush(Cosmos::BLACK)
|
163
|
-
dc.drawPolygon(top_triangle)
|
164
|
-
top_triangle.dispose
|
165
|
-
|
166
|
-
#Additional drawing for subclasses
|
167
|
-
additional_drawing(dc)
|
168
|
-
end # if draw_bar == true
|
169
|
-
end
|
67
|
+
# Draw YELLOW_HIGH bar
|
68
|
+
dc.addRectColorFill(x_pos, y_pos, widths.yellow_high, @bar_height, 'yellow')
|
69
|
+
dc.addRectColor(x_pos, y_pos, widths.yellow_high, @bar_height)
|
70
|
+
x_pos += widths.yellow_high
|
71
|
+
|
72
|
+
# Draw RED_HIGH bar
|
73
|
+
dc.addRectColorFill(x_pos, y_pos, widths.red_high, @bar_height, 'red')
|
74
|
+
dc.addRectColor(x_pos, y_pos, widths.red_high, @bar_height)
|
75
|
+
x_pos += widths.red_high
|
76
|
+
|
77
|
+
# Draw line at current value
|
78
|
+
red_low = limits[0]
|
79
|
+
red_high = limits[3]
|
80
|
+
@bar_scale = (red_high - red_low) / 0.8
|
81
|
+
@low_value = red_low - 0.1 * @bar_scale
|
82
|
+
@high_value = red_high + 0.1 * @bar_scale
|
83
|
+
|
84
|
+
@line_pos = (@x_pad + (@value - @low_value) / @bar_scale * @bar_width).to_i
|
85
|
+
if @line_pos < @x_pad
|
86
|
+
@line_pos = @x_pad
|
87
|
+
end
|
88
|
+
if @line_pos > @x_pad + @bar_width
|
89
|
+
@line_pos = @bar_width + @x_pad
|
90
|
+
end
|
91
|
+
|
92
|
+
dc.addLineColor(@line_pos, @y_pad - 3, @line_pos, @y_pad + @bar_height + 3)
|
170
93
|
|
171
|
-
|
94
|
+
# Draw triangle above current value line
|
95
|
+
top_triangle = Qt::Polygon.new(3)
|
96
|
+
top_triangle.setPoint(0, @line_pos, @y_pad - 1)
|
97
|
+
top_triangle.setPoint(1, @line_pos-5, @y_pad - 6)
|
98
|
+
top_triangle.setPoint(2, @line_pos+5, @y_pad - 6)
|
99
|
+
dc.setBrush(Cosmos::BLACK)
|
100
|
+
dc.drawPolygon(top_triangle)
|
101
|
+
top_triangle.dispose
|
172
102
|
|
173
|
-
|
174
|
-
|
103
|
+
# Additional drawing for subclasses
|
104
|
+
additional_drawing(dc)
|
175
105
|
end
|
176
106
|
end
|
177
107
|
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# encoding: ascii-8bit
|
2
|
+
|
3
|
+
# Copyright 2015 Ball Aerospace & Technologies Corp.
|
4
|
+
# All Rights Reserved.
|
5
|
+
#
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
7
|
+
# under the terms of the GNU General Public License
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
10
|
+
|
11
|
+
require 'cosmos/tools/tlm_viewer/widgets/widget'
|
12
|
+
|
13
|
+
module Cosmos
|
14
|
+
|
15
|
+
class LimitscolorWidget < Qt::Label
|
16
|
+
include Widget
|
17
|
+
|
18
|
+
def initialize(parent_layout, target_name, packet_name, item_name, value_type = :CONVERTED, radius = 10, use_full_item_name = false)
|
19
|
+
super(target_name, packet_name, item_name, value_type)
|
20
|
+
@value_type = :CONVERTED if @value_type == :WITH_UNITS
|
21
|
+
use_full_item_name = ConfigParser::handle_true_false(use_full_item_name)
|
22
|
+
@painter = nil
|
23
|
+
@foreground = Cosmos::BLACK
|
24
|
+
parent_layout.addWidget(self) if parent_layout
|
25
|
+
@font = font()
|
26
|
+
metrics = Cosmos.getFontMetrics(@font)
|
27
|
+
if use_full_item_name
|
28
|
+
@item_text = "#{@target_name} #{@packet_name} #{@item_name}"
|
29
|
+
else
|
30
|
+
@item_text = @item_name
|
31
|
+
end
|
32
|
+
text_width = metrics.width(@item_text)
|
33
|
+
@radius = radius.to_i
|
34
|
+
@diameter = @radius * 2
|
35
|
+
@text_height = @font.pointSize
|
36
|
+
@left_offset = @diameter + 5
|
37
|
+
if @text_height > @diameter
|
38
|
+
@text_baseline = @text_height
|
39
|
+
setFixedSize(text_width + @left_offset, @text_height + 2)
|
40
|
+
else
|
41
|
+
@text_baseline = @text_height + ((@diameter - @text_height) / 2)
|
42
|
+
setFixedSize(text_width + @left_offset, @diameter + 2)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.takes_value?
|
47
|
+
return true
|
48
|
+
end
|
49
|
+
|
50
|
+
def value=(data)
|
51
|
+
super(data)
|
52
|
+
case @limits_state
|
53
|
+
when :RED, :RED_HIGH, :RED_LOW
|
54
|
+
@foreground = 'red'
|
55
|
+
when :YELLOW, :YELLOW_HIGH, :YELLOW_LOW
|
56
|
+
@foreground = 'yellow'
|
57
|
+
when :GREEN, :GREEN_HIGH, :GREEN_LOW
|
58
|
+
@foreground = 'lime'
|
59
|
+
when :BLUE
|
60
|
+
@foreground = 'dodgerblue'
|
61
|
+
when :STALE
|
62
|
+
@foreground = Cosmos::PURPLE
|
63
|
+
else
|
64
|
+
@foreground = Cosmos::BLACK
|
65
|
+
end
|
66
|
+
update()
|
67
|
+
end
|
68
|
+
|
69
|
+
def paintEvent(event)
|
70
|
+
begin
|
71
|
+
super(event)
|
72
|
+
return if @painter
|
73
|
+
@painter = Qt::Painter.new(self)
|
74
|
+
# Seems like on initialization sometimes we get some weird bad conditions so check for them
|
75
|
+
if @painter.isActive and @painter.paintEngine
|
76
|
+
paint_implementation(@painter)
|
77
|
+
end
|
78
|
+
@painter.dispose
|
79
|
+
@painter = nil
|
80
|
+
rescue Exception => err
|
81
|
+
Cosmos.handle_fatal_exception(err)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def paint_implementation(dc)
|
86
|
+
dc.setBrush(Cosmos.getBrush(@foreground))
|
87
|
+
dc.drawEllipse(0, 0, @diameter, @diameter)
|
88
|
+
dc.setBrush(Cosmos.getBrush(Cosmos::BLACK))
|
89
|
+
dc.drawText(@left_offset, @text_baseline, @item_text)
|
90
|
+
|
91
|
+
#Additional drawing for subclasses
|
92
|
+
additional_drawing(dc)
|
93
|
+
end
|
94
|
+
|
95
|
+
protected
|
96
|
+
|
97
|
+
def additional_drawing (dc)
|
98
|
+
# Do nothing
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
end # module Cosmos
|