From 2b7a8419009179876d13ad3ec481eec0296ab195 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 15 Aug 2023 15:45:24 +0300 Subject: [PATCH 1/7] godot4 --- scenes/tab_switch.tscn | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scenes/tab_switch.tscn b/scenes/tab_switch.tscn index 7b666cbd..ce689a06 100644 --- a/scenes/tab_switch.tscn +++ b/scenes/tab_switch.tscn @@ -12,6 +12,7 @@ offset_bottom = 1200.0 script = ExtResource("1_siu2d") [node name="работа" parent="." instance=ExtResource("2_c0cdr")] +visible = false layout_mode = 2 [node name="контроль" parent="." instance=ExtResource("3_44o58")] @@ -25,3 +26,5 @@ layout_mode = 2 [node name="ЭМС" parent="." instance=ExtResource("5_jlo8o")] visible = false layout_mode = 2 + +[connection signal="gui_input" from="работа" to="работа" method="_on_gui_input"] From e5c5f41b5febb77716e482562f05a5cd6dc5fa07 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 15 Aug 2023 15:46:03 +0300 Subject: [PATCH 2/7] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0.=20=D0=A2=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D1=81?= =?UTF-8?q?=D0=BE=D0=B1=D1=8B=D1=82=D0=B8=D1=8F=20=D0=B2=D0=B2=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=20=D0=BF=D1=80=D0=B8=D1=85=D0=BE=D0=B4=D1=8F=D1=82=20?= =?UTF-8?q?=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D1=8B=D1=85=20=D1=8D=D0=BB?= =?UTF-8?q?=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/работа.gd | 2 +- table/table.gd | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/scenes/работа.gd b/scenes/работа.gd index 336859f6..a5d86c3d 100644 --- a/scenes/работа.gd +++ b/scenes/работа.gd @@ -158,7 +158,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..3013738c 100644 --- a/table/table.gd +++ b/table/table.gd @@ -40,6 +40,7 @@ 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 _unhandled_key_input(event: InputEvent) -> void: _gui_input(event) ## Закрепляет заголовок таблицы. [param scrl] - Прокрутка, @@ -182,9 +183,9 @@ func set_columns_aligment(alignments: Array) -> void: ## -func _input(event) -> void: +func _gui_input(event) -> void: if event is InputEventKey: - if in_focus and event.pressed: + if not event.pressed: if event.keycode == selector_key_up: selector_up() elif event.keycode == selector_key_down: From 3caf6c79637e48ef22ae0f4eec6cbc5098a0bad9 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 16 Aug 2023 08:48:28 +0300 Subject: [PATCH 3/7] godot4 --- scenes/canvas.tscn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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) From 0d1d132ec3b17f0a85ce5dbbf2c1610d93f31339 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 16 Aug 2023 08:57:10 +0300 Subject: [PATCH 4/7] =?UTF-8?q?=D0=9E=D1=82=D0=BA=D0=B0=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/работа.gd | 1 + table/table.gd | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/scenes/работа.gd b/scenes/работа.gd index a5d86c3d..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) ## Обработчик сигнала изменения списка целей diff --git a/table/table.gd b/table/table.gd index 3013738c..661a65f7 100644 --- a/table/table.gd +++ b/table/table.gd @@ -183,9 +183,9 @@ func set_columns_aligment(alignments: Array) -> void: ## -func _gui_input(event) -> void: +func _input(event) -> void: if event is InputEventKey: - if not event.pressed: + if event.pressed and in_focus: if event.keycode == selector_key_up: selector_up() elif event.keycode == selector_key_down: From 85a63f1d47e851b4a0bae2912df0b5ad6144772c Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 16 Aug 2023 08:58:48 +0300 Subject: [PATCH 5/7] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5.=20=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BD=D0=B5=D1=8F=D0=B2=D0=BD=D0=BE=20=D1=83?= =?UTF-8?q?=D0=BA=D0=B0=D0=B7=D0=B0=D0=BD=D0=BD=D0=BE=D0=B5=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B1=D1=8B=D1=82=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- table/table.gd | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/table/table.gd b/table/table.gd index 661a65f7..00fcb639 100644 --- a/table/table.gd +++ b/table/table.gd @@ -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,9 +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 _unhandled_key_input(event: InputEvent) -> void: _gui_input(event) +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] - Прокрутка, @@ -393,9 +393,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) @@ -460,12 +461,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) ## From 59feb84003b228d1c0db75c2401e1d27c7390d33 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 16 Aug 2023 09:48:23 +0300 Subject: [PATCH 6/7] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- table/table.gd | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/table/table.gd b/table/table.gd index 00fcb639..7e229f22 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,9 +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_USER_DATA = 'user_data' ## Имя свойства для сохранения данных пользователя -const META_CALLABLE = 'callable' ## Имя свойства для сохранения вызываемого -const META_EVENT_NAME = 'event_name' ## Имя свойства для сохранения названия события +const META_USER_DATA = 'user_data' ## Имя свойства для сохранения данных пользователя +const META_CALLABLE = 'callable' ## Имя свойства для сохранения вызываемого +const META_EVENT_NAME = 'event_name' ## Имя свойства для сохранения названия события var header: GridContainer ## Заголовок таблицы var in_focus: = false ## Фокус пользовательского ввода From 17e5efedbcf0e9e8fc0c38eb2cad4df977b50b5f Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 16 Aug 2023 09:49:30 +0300 Subject: [PATCH 7/7] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0.=20=D0=9F=D1=80=D0=BE=D0=BA=D1=80=D1=83=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D1=8B=20?= =?UTF-8?q?=D0=B2=D1=81=D0=BB=D0=B5=D0=B4=20=D0=B7=D0=B0=20=D1=81=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=BA=D1=82=D0=BE=D1=80=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- table/table.gd | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/table/table.gd b/table/table.gd index 7e229f22..bc82f035 100644 --- a/table/table.gd +++ b/table/table.gd @@ -69,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) @@ -85,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)