diff --git a/scenes/canvas.tscn b/scenes/canvas.tscn index a6d08416..862fd598 100644 --- a/scenes/canvas.tscn +++ b/scenes/canvas.tscn @@ -8,7 +8,7 @@ [sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_2bft1"] size = Vector2(1600, 1200) -[sub_resource type="ShaderMaterial" id="ShaderMaterial_ogspn"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_dklk6"] resource_local_to_scene = true shader = ExtResource("4_gb4a1") shader_parameter/color = Color(1, 1, 1, 0.168627) @@ -26,6 +26,6 @@ centered = false script = ExtResource("2_vkwmy") [node name="строб" parent="." instance=ExtResource("3_uhdvc")] -material = SubResource("ShaderMaterial_ogspn") +material = SubResource("ShaderMaterial_dklk6") position = Vector2(560, 560) scale = Vector2(1100, 1100) diff --git a/scenes/tab_switch.tscn b/scenes/tab_switch.tscn index 78350f2a..0bbbf2fe 100644 --- a/scenes/tab_switch.tscn +++ b/scenes/tab_switch.tscn @@ -1,27 +1,30 @@ [gd_scene load_steps=6 format=3 uid="uid://3slb0i3pvowc"] -[ext_resource type="Script" path="res://scenes/tab_switch.gd" id="1_7r2o8"] -[ext_resource type="PackedScene" uid="uid://b276iygic5itk" path="res://scenes/работа.tscn" id="2_1dgoj"] -[ext_resource type="PackedScene" uid="uid://lwmw4egynmd1" path="res://scenes/контроль.tscn" id="3_5nxuy"] -[ext_resource type="PackedScene" uid="uid://trt0q8th3bn2" path="res://scenes/журнал.tscn" id="4_f2u82"] -[ext_resource type="PackedScene" uid="uid://dab6loryocc73" path="res://scenes/ЭМС.tscn" id="5_ocw3o"] +[ext_resource type="Script" path="res://scenes/tab_switch.gd" id="1_wyyi7"] +[ext_resource type="PackedScene" uid="uid://b276iygic5itk" path="res://scenes/работа.tscn" id="2_r1u0h"] +[ext_resource type="PackedScene" uid="uid://lwmw4egynmd1" path="res://scenes/контроль.tscn" id="3_dmb4a"] +[ext_resource type="PackedScene" uid="uid://trt0q8th3bn2" path="res://scenes/журнал.tscn" id="4_pp7si"] +[ext_resource type="PackedScene" uid="uid://dab6loryocc73" path="res://scenes/ЭМС.tscn" id="5_kbxv3"] [node name="tab_switch" type="TabContainer"] offset_right = 1600.0 offset_bottom = 1200.0 -script = ExtResource("1_7r2o8") +script = ExtResource("1_wyyi7") -[node name="работа" parent="." instance=ExtResource("2_1dgoj")] -layout_mode = 2 - -[node name="контроль" parent="." instance=ExtResource("3_5nxuy")] +[node name="работа" parent="." instance=ExtResource("2_r1u0h")] visible = false layout_mode = 2 -[node name="журнал" parent="." instance=ExtResource("4_f2u82")] +[node name="контроль" parent="." instance=ExtResource("3_dmb4a")] visible = false layout_mode = 2 -[node name="ЭМС" parent="." instance=ExtResource("5_ocw3o")] +[node name="журнал" parent="." instance=ExtResource("4_pp7si")] visible = false layout_mode = 2 + +[node name="ЭМС" parent="." instance=ExtResource("5_kbxv3")] +visible = false +layout_mode = 2 + +[connection signal="gui_input" from="работа" to="работа" method="_on_gui_input"] diff --git a/scenes/работа.gd b/scenes/работа.gd index 336859f6..19d8487a 100644 --- a/scenes/работа.gd +++ b/scenes/работа.gd @@ -42,6 +42,7 @@ enum DragFSM { ## Переключант режим окна программы полный экран - обычный func _on_full_screen(): toggle_full_screen(window_0_id) +func _unhandled_key_input(event: InputEvent) -> void: _on_gui_input(event) ## Обработчик сигнала изменения списка целей @@ -158,7 +159,7 @@ func _on_drag_begin(event) -> void: ## Обработчик событий вввода. Вызывается godot -func _input(event): +func _on_gui_input(event): if event is InputEventMouseMotion: if drag_fsm == DragFSM.DRAG: emit_signal('drag_continue', event) diff --git a/table/table.gd b/table/table.gd index f7d64372..bc82f035 100644 --- a/table/table.gd +++ b/table/table.gd @@ -2,10 +2,10 @@ extends GridContainer ## Виджет "Таблица" -@export var node_gap: = Vector2(0.0, 0.0) ## Зазор между ячейками, который не возможно вычислить или получить -@export var selector_color: = Color(1.0, 1.0, 1.0, 1.0) ## Окрашивающий цвет для индикатора выбранного ряда -@export var selector_key_down: Key = KEY_DOWN ## Клавиша увеличения индекса выбранного ряда -@export var selector_key_up: Key = KEY_UP ## Клавиша уменьшения индекса выбранного ряда +@export var node_gap: = Vector2(0.0, 0.0) ## Зазор между ячейками, который не возможно вычислить или получить +@export var selector_color: = Color(1.0, 1.0, 1.0, 1.0) ## Окрашивающий цвет для индикатора выбранного ряда +@export var selector_key_down: Key = KEY_DOWN ## Клавиша увеличения индекса выбранного ряда +@export var selector_key_up: Key = KEY_UP ## Клавиша уменьшения индекса выбранного ряда @export_file var node_type_file: = 'res://table/node.tscn': get = get_node_scene, set = load_node_scene ## Сцена ячейки устанавливаемая по умолчанию @export_file var selector_type_file: = 'res://table/selector.tscn': set = load_selector_scene ## Сцена индикатора для выбранного ряда @@ -18,8 +18,9 @@ const SLCT_PREFIX = 'SLCT_' ## Префикс ключа индикато const HEAD_KEY_FORMAT = HEAD_PREFIX + INDEX_FORMAT ## Формат ключа заголовка const NODE_KEY_FORMAT = NODE_PREFIX + INDEX_FORMAT ## Формат ключа ячейки const ROW_SELECTOR_KEY_FORMAT = SLCT_PREFIX + INDEX_FORMAT ## Формат ключа индикаторов выбранного ряда -const META_NAME_USER_DATA = 'user_data' -const META_NAME_CALLEBLE = 'calleble' +const META_USER_DATA = 'user_data' ## Имя свойства для сохранения данных пользователя +const META_CALLABLE = 'callable' ## Имя свойства для сохранения вызываемого +const META_EVENT_NAME = 'event_name' ## Имя свойства для сохранения названия события var header: GridContainer ## Заголовок таблицы var in_focus: = false ## Фокус пользовательского ввода @@ -38,8 +39,8 @@ var scroll_adj: = Vector2(0, 0) func get_node_scene(): return node_type_file func _assert_meta(i_col: int, i_row: int, pname: String, node): assert(node.has_meta(pname), 'ошибка: нет мета-свойства \"%s\" у ячейки колонка:%d ряд:%d' % [pname, i_col, i_row]) -func get_node_user_data(i_col: int, i_row: int): return get_node_meta(i_col, i_row, META_NAME_USER_DATA) -func set_node_user_data(i_col: int, i_row: int, val) -> void: set_node_meta(i_col, i_row, META_NAME_USER_DATA, val) +func get_node_user_data(i_col: int, i_row: int): return get_node_meta(i_col, i_row, META_USER_DATA) +func set_node_user_data(i_col: int, i_row: int, val) -> void: set_node_meta(i_col, i_row, META_USER_DATA, val) ## Закрепляет заголовок таблицы. [param scrl] - Прокрутка, @@ -68,6 +69,9 @@ func selector_up(): if i_row < 0: i_row = rows_count - 1 set_row_selected(i_row, true) + var node = get_node2(0, i_row) + if scroll is ScrollContainer: + scroll.ensure_control_visible(node) emit_signal('selected_changed', i_row) @@ -84,6 +88,9 @@ func selector_down(): i_row += 1 i_row %= rows_count set_row_selected(i_row, true) + var node = get_node2(0, i_row) + if scroll is ScrollContainer: + scroll.ensure_control_visible(node) emit_signal('selected_changed', i_row) @@ -184,7 +191,7 @@ func set_columns_aligment(alignments: Array) -> void: ## func _input(event) -> void: if event is InputEventKey: - if in_focus and event.pressed: + if event.pressed and in_focus: if event.keycode == selector_key_up: selector_up() elif event.keycode == selector_key_down: @@ -392,9 +399,10 @@ func remove_row(i_row: int): var conn = get_node_meta(i_col, i_row, 'callable_focus_entered') node.disconnect('focus_entered', conn) - if node.has_meta(META_NAME_CALLEBLE): - conn = node.get_meta(META_NAME_CALLEBLE) - node.disconnect('pressed', conn) + if node.has_meta(META_CALLABLE): + conn = node.get_meta(META_CALLABLE) + var event_name = node.get_meta(META_EVENT_NAME) + node.disconnect(event_name, conn) remove_child(node) nodes.erase(node_key) @@ -459,12 +467,13 @@ func connect_columns(dest_node: Node, event_name: String, callback: String, clmn for i_col in clmns: assert(i_col >= 0 and i_col < columns, 'ошибка: нет такой колонки: %d' % i_col) var node = get_node2(i_col, i_row) - if node.has_meta(META_NAME_CALLEBLE): - var conn = node.get_meta(META_NAME_CALLEBLE) + if node.has_meta(META_CALLABLE): + var conn = node.get_meta(META_CALLABLE) node.disconnect(event_name, conn) var conn = Callable(dest_node, callback).bind([node] + user_data) assert (OK == node.connect(event_name, conn)) - node.set_meta(META_NAME_CALLEBLE, conn) + node.set_meta(META_CALLABLE, conn) + node.set_meta(META_EVENT_NAME, event_name) ##