Files
uarep-ctl/scenes/контроль/блок-в.tscn

555 lines
16 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[gd_scene load_steps=15 format=3 uid="uid://bcyxqni7gxvtq"]
[ext_resource type="Texture2D" uid="uid://c6nve6f8sfyj2" path="res://data/состояние-исправности-0.png" id="1_n1aqt"]
[ext_resource type="Texture2D" uid="uid://dnreyfh3cd1k2" path="res://data/состояние-исправности-1.png" id="2_rim3u"]
[ext_resource type="Texture2D" uid="uid://c6booa8753u5t" path="res://data/состояние-исправности-2.png" id="3_3w8fg"]
[ext_resource type="Texture2D" uid="uid://c4mdrmk7h638f" path="res://data/nine-patch-round.png" id="4_mcviv"]
[ext_resource type="Texture2D" uid="uid://00871pb6moln" path="res://data/прогресс-фон-1.png" id="5_rim3u"]
[ext_resource type="Texture2D" uid="uid://c1k856fxhrjnh" path="res://data/прогресс-заполнение-1.png" id="6_3w8fg"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3nd2u"]
[sub_resource type="GDScript" id="GDScript_oj3k3"]
script/source = "@tool
class_name blok_v extends PanelContainer
@export var textures: Array
@export var animation_duration: float = 1.5
signal pressed(control: PanelContainer)
## Значения уровней
@export var value0: Array:
set(v):
value0.assign(v)
var items: Array = get_level_nodes()
var count: int = min(items.size(), v.size())
for i in count:
set_value0_animated(items[i], v[i])
## Значение уровня
@export var value1: float:
set(v):
value1 = v
if not is_inside_tree():
return
$margin/vbox/grid1/level7.value = v
$margin/vbox/grid1/level7.tint_progress = Color.RED if v >= 70 else Color.GOLD if v >= 60 else Color.WHITE
@export var min_value0: float:
set(v):
min_value0 = v
var items: = get_level_nodes()
set_group_param(items, 'min_value', v)
@export var min_value1: float:
set(v):
min_value1 = v
if not is_inside_tree():
return
$margin/vbox/grid1/level7.min_value = v
@export var max_value0: float:
set(v):
max_value0 = v
var items: = get_level_nodes()
set_group_param(items, 'max_value', v)
@export var max_value1: float:
set(v):
max_value1 = v
if not is_inside_tree():
return
$margin/vbox/grid1/level7.max_value = v
@export var step0: float:
set(v):
step0 = v
var items: = get_level_nodes()
set_group_param(items, 'step', v)
@export var step1: float:
set(v):
step1 = v
if not is_inside_tree():
return
$margin/vbox/grid1/level7.step = v
@export var value_name0: String:
set(v):
value_name0 = v
var items: Array = get_name_nodes()
set_group_param(items, 'text', v)
@export var value_name1: String:
set(v):
value_name1 = v
if not is_inside_tree():
return
$margin/vbox/grid2/lbl7.text = v
@export var fname: String:
set(v):
fname = v
if not is_inside_tree():
return
$margin/vbox/grid0/fname.text = v
@export var rname: String:
set(v):
rname = v
if not is_inside_tree():
return
$margin/vbox/grid0/rname.text = v
@export var state: int:
set(v):
state = tools.clip_value(v, 0, textures.size() - 1)
if not is_inside_tree():
return
$margin/vbox/grid0/state.texture = textures[state]
@export var alignment: int:
set(v):
alignment = v
if is_inside_tree():
$margin/vbox.alignment = v
@export var value0_info: String:
set(v):
value0_info = v
@export var value1_info: String:
set(v):
value1_info = v
func _on_button_pressed(): emit_signal('pressed', self)
func set_value0(value: Array): value0.assign(value)
func _enter_tree() -> void: call_deferred('_enter_tree_defered')
func _ready():
var items: Array = get_level_nodes()
for item in items:
item.connect('value_changed', on_level_changed.bind(item, value0_info))
on_level_changed(item.value, item, value0_info)
var level7: = $margin/vbox/grid1/level7
level7.connect('value_changed', on_level_changed.bind(level7, value1_info))
on_level_changed(level7.value, level7, value1_info)
func on_level_changed(_val: float, item: TextureProgressBar, info: String):
item.tooltip_text = '%s\\nТекущее: %0.2f\\nДиапазон: %0.2f…%0.2f' % [info, item.value, item.min_value, item.max_value]
func set_group_param(items: Array, param: StringName, v) -> void:
if not is_inside_tree():
return
if not get_tree():
return
for i in items.size():
items[i].set(param, v)
func set_value0_by_index(index: int, value: float) -> void:
var items: Array = get_level_nodes()
items[index].value = value
func _enter_tree_defered():
var items: Array = get_level_nodes()
var count: int = min(items.size(), value0.size())
for i in count:
items[i].min_value = min_value0
items[i].max_value = 1400 # max_value0: TODO для отладки
items[i].step = step0
items = get_name_nodes()
set_group_param(items, 'text', value_name0)
if is_inside_tree():
$margin/vbox/grid1/level7.value = value1
$margin/vbox/grid1/level7.min_value = min_value1
$margin/vbox/grid1/level7.max_value = max_value1
$margin/vbox/grid1/level7.step = step1
$margin/vbox/grid2/lbl7.text = value_name1
$margin/vbox.alignment = alignment
$margin/vbox/grid0/rname.text = rname
$margin/vbox/grid0/fname.text = fname
$margin/vbox/grid0/state.texture = textures[state]
#else:
#push_warning('обращение к %s вне дерева' % self) TODO: пишеться только когда заходишь в проект а дальше не используется
func get_level_nodes() -> Array:
if not is_inside_tree():
return []
if not get_tree():
return []
return [
$margin/vbox/grid1/level1,
$margin/vbox/grid1/level2,
$margin/vbox/grid1/level3,
$margin/vbox/grid1/level4,
$margin/vbox/grid1/level5,
$margin/vbox/grid1/level6 ]
func get_name_nodes() -> Array:
if not is_inside_tree():
return []
if not get_tree():
return []
return [
$margin/vbox/grid2/lbl1,
$margin/vbox/grid2/lbl2,
$margin/vbox/grid2/lbl3,
$margin/vbox/grid2/lbl4,
$margin/vbox/grid2/lbl5,
$margin/vbox/grid2/lbl6 ]
func set_value0_animated(target_node, target_value: float) -> void:
var tween: Tween = create_tween()
tween.set_ease(Tween.EASE_OUT)
tween.set_trans(Tween.TRANS_QUINT)
tween.tween_property(target_node, 'value', target_value, animation_duration)
"
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rceim"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8yvwo"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_6qu57"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_mlxje"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3dspb"]
[sub_resource type="GDScript" id="GDScript_45hqb"]
script/source = "@tool
extends MarginContainer
func _enter_tree() -> void:
margins = [8, 8, 8, 8]
@export var margins: Array:
set(vals):
add_theme_constant_override('margin_top', vals[0])
add_theme_constant_override('margin_left', vals[1])
add_theme_constant_override('margin_bottom', vals[2])
add_theme_constant_override('margin_right', vals[3])
get:
var vals = [0, 0, 0, 0]
vals[0] = get_theme_constant('margin_top')
vals[1] = get_theme_constant('margin_left')
vals[2] = get_theme_constant('margin_bottom')
vals[3] = get_theme_constant('margin_right')
return vals
"
[node name="блок-в" type="PanelContainer"]
editor_description = "Элемент замены из ЗИП"
offset_right = 160.0
offset_bottom = 88.0
theme_override_styles/panel = SubResource("StyleBoxEmpty_3nd2u")
script = SubResource("GDScript_oj3k3")
textures = [ExtResource("1_n1aqt"), ExtResource("2_rim3u"), ExtResource("3_3w8fg")]
value0 = [20.0, 30.0, 40.0, 50.0, 60.0, 70.0]
max_value0 = 1400.0
max_value1 = 70.0
step0 = 1.0
step1 = 1.0
value_name0 = "P,%"
value_name1 = "°C"
fname = "Блок В"
rname = "A1"
[node name="button" type="Button" parent="."]
layout_mode = 2
theme_override_styles/focus = SubResource("StyleBoxEmpty_rceim")
theme_override_styles/disabled = SubResource("StyleBoxEmpty_8yvwo")
theme_override_styles/hover = SubResource("StyleBoxEmpty_6qu57")
theme_override_styles/pressed = SubResource("StyleBoxEmpty_mlxje")
theme_override_styles/normal = SubResource("StyleBoxEmpty_3dspb")
[node name="rect" type="NinePatchRect" parent="."]
layout_mode = 2
texture = ExtResource("4_mcviv")
draw_center = false
region_rect = Rect2(0, 0, 63, 63)
patch_margin_left = 17
patch_margin_top = 17
patch_margin_right = 17
patch_margin_bottom = 15
[node name="margin" type="MarginContainer" parent="."]
layout_mode = 2
theme_override_constants/margin_left = 8
theme_override_constants/margin_top = 8
theme_override_constants/margin_right = 8
theme_override_constants/margin_bottom = 8
script = SubResource("GDScript_45hqb")
margins = [8, 8, 8, 8]
[node name="vbox" type="VBoxContainer" parent="margin"]
layout_mode = 2
[node name="grid0" type="GridContainer" parent="margin/vbox"]
layout_mode = 2
columns = 3
[node name="state" type="TextureRect" parent="margin/vbox/grid0"]
custom_minimum_size = Vector2(24, 24)
layout_mode = 2
size_flags_horizontal = 2
size_flags_vertical = 6
texture = ExtResource("1_n1aqt")
expand_mode = 1
[node name="fname" type="Label" parent="margin/vbox/grid0"]
self_modulate = Color(1, 1, 1, 0.627451)
custom_minimum_size = Vector2(0, 20)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_font_sizes/font_size = 17
text = "Блок В"
horizontal_alignment = 1
vertical_alignment = 1
[node name="rname" type="Label" parent="margin/vbox/grid0"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 6
theme_override_font_sizes/font_size = 18
text = "A1"
horizontal_alignment = 2
vertical_alignment = 1
[node name="grid1" type="GridContainer" parent="margin/vbox"]
layout_mode = 2
size_flags_vertical = 3
columns = 7
[node name="level1" type="TextureProgressBar" parent="margin/vbox/grid1" groups=["уровни"]]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
tooltip_text = "
Текущее: 0.00
Диапазон: 0.00…1400.00"
mouse_filter = 0
max_value = 1400.0
fill_mode = 3
nine_patch_stretch = true
stretch_margin_left = 8
stretch_margin_top = 8
stretch_margin_right = 8
stretch_margin_bottom = 8
texture_under = ExtResource("5_rim3u")
texture_progress = ExtResource("6_3w8fg")
tint_under = Color(1, 1, 1, 0.419608)
tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
[node name="level2" type="TextureProgressBar" parent="margin/vbox/grid1" groups=["уровни"]]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
tooltip_text = "
Текущее: 0.00
Диапазон: 0.00…1400.00"
mouse_filter = 0
max_value = 1400.0
fill_mode = 3
nine_patch_stretch = true
stretch_margin_left = 8
stretch_margin_top = 8
stretch_margin_right = 8
stretch_margin_bottom = 8
texture_under = ExtResource("5_rim3u")
texture_progress = ExtResource("6_3w8fg")
tint_under = Color(1, 1, 1, 0.419608)
tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
[node name="level3" type="TextureProgressBar" parent="margin/vbox/grid1" groups=["уровни"]]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
tooltip_text = "
Текущее: 0.00
Диапазон: 0.00…1400.00"
mouse_filter = 0
max_value = 1400.0
fill_mode = 3
nine_patch_stretch = true
stretch_margin_left = 8
stretch_margin_top = 8
stretch_margin_right = 8
stretch_margin_bottom = 8
texture_under = ExtResource("5_rim3u")
texture_progress = ExtResource("6_3w8fg")
tint_under = Color(1, 1, 1, 0.419608)
tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
[node name="level4" type="TextureProgressBar" parent="margin/vbox/grid1" groups=["уровни"]]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
tooltip_text = "
Текущее: 0.00
Диапазон: 0.00…1400.00"
mouse_filter = 0
max_value = 1400.0
fill_mode = 3
nine_patch_stretch = true
stretch_margin_left = 8
stretch_margin_top = 8
stretch_margin_right = 8
stretch_margin_bottom = 8
texture_under = ExtResource("5_rim3u")
texture_progress = ExtResource("6_3w8fg")
tint_under = Color(1, 1, 1, 0.419608)
tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
[node name="level5" type="TextureProgressBar" parent="margin/vbox/grid1" groups=["уровни"]]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
tooltip_text = "
Текущее: 0.00
Диапазон: 0.00…1400.00"
mouse_filter = 0
max_value = 1400.0
fill_mode = 3
nine_patch_stretch = true
stretch_margin_left = 8
stretch_margin_top = 8
stretch_margin_right = 8
stretch_margin_bottom = 8
texture_under = ExtResource("5_rim3u")
texture_progress = ExtResource("6_3w8fg")
tint_under = Color(1, 1, 1, 0.419608)
tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
[node name="level6" type="TextureProgressBar" parent="margin/vbox/grid1" groups=["уровни"]]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
tooltip_text = "
Текущее: 0.00
Диапазон: 0.00…1400.00"
mouse_filter = 0
max_value = 1400.0
fill_mode = 3
nine_patch_stretch = true
stretch_margin_left = 8
stretch_margin_top = 8
stretch_margin_right = 8
stretch_margin_bottom = 8
texture_under = ExtResource("5_rim3u")
texture_progress = ExtResource("6_3w8fg")
tint_under = Color(1, 1, 1, 0.419608)
tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
[node name="level7" type="TextureProgressBar" parent="margin/vbox/grid1"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
tooltip_text = "
Текущее: 0.00
Диапазон: 0.00…70.00"
mouse_filter = 0
max_value = 70.0
fill_mode = 3
nine_patch_stretch = true
stretch_margin_left = 8
stretch_margin_top = 8
stretch_margin_right = 8
stretch_margin_bottom = 8
texture_under = ExtResource("5_rim3u")
texture_progress = ExtResource("6_3w8fg")
tint_under = Color(0.890196, 0.486275, 0.196078, 1)
tint_over = Color(0.890196, 0.486275, 0.196078, 1)
[node name="grid2" type="GridContainer" parent="margin/vbox"]
clip_contents = true
layout_mode = 2
size_flags_vertical = 4
columns = 7
[node name="lbl1" type="Label" parent="margin/vbox/grid2" groups=["названия"]]
clip_contents = true
layout_mode = 2
size_flags_horizontal = 3
theme_override_font_sizes/font_size = 8
text = "P,%"
horizontal_alignment = 1
[node name="lbl2" type="Label" parent="margin/vbox/grid2" groups=["названия"]]
clip_contents = true
layout_mode = 2
size_flags_horizontal = 3
theme_override_font_sizes/font_size = 8
text = "P,%"
horizontal_alignment = 1
[node name="lbl3" type="Label" parent="margin/vbox/grid2" groups=["названия"]]
clip_contents = true
layout_mode = 2
size_flags_horizontal = 3
theme_override_font_sizes/font_size = 8
text = "P,%"
horizontal_alignment = 1
[node name="lbl4" type="Label" parent="margin/vbox/grid2" groups=["названия"]]
clip_contents = true
layout_mode = 2
size_flags_horizontal = 3
theme_override_font_sizes/font_size = 8
text = "P,%"
horizontal_alignment = 1
[node name="lbl5" type="Label" parent="margin/vbox/grid2" groups=["названия"]]
clip_contents = true
layout_mode = 2
size_flags_horizontal = 3
theme_override_font_sizes/font_size = 8
text = "P,%"
horizontal_alignment = 1
[node name="lbl6" type="Label" parent="margin/vbox/grid2" groups=["названия"]]
clip_contents = true
layout_mode = 2
size_flags_horizontal = 3
theme_override_font_sizes/font_size = 8
text = "P,%"
horizontal_alignment = 1
[node name="lbl7" type="Label" parent="margin/vbox/grid2"]
clip_contents = true
layout_mode = 2
size_flags_horizontal = 3
theme_override_font_sizes/font_size = 8
text = "°C"
horizontal_alignment = 1
[connection signal="pressed" from="button" to="." method="_on_button_pressed"]