From 6571f15053deb4bf97634a3d0ea1cf42f142094c Mon Sep 17 00:00:00 2001 From: urbit-pilled Date: Tue, 17 Dec 2024 12:51:56 +1300 Subject: [PATCH] Added advanced checkbox This adds an advanced mode to the title dock that allows the user to see advanced blocks, which will help us add advanced blocks without cluttering the block list. I implemented it by: - adding `is_advanced` boolean to the `BlockDefinition` class and set the default value to false. - adding an "advanced" checkbox to `main_panel.tscn` - modifying `picker.gd` to filter the block list to hide advanced blocks if the checkbox is unchecked. Fixes https://github.com/endlessm/godot-block-coding/issues/282 --- addons/block_code/code_generation/block_definition.gd | 4 ++++ addons/block_code/ui/main_panel.gd | 5 +++++ addons/block_code/ui/main_panel.tscn | 5 +++++ addons/block_code/ui/picker/picker.gd | 10 ++++++++++ 4 files changed, 24 insertions(+) diff --git a/addons/block_code/code_generation/block_definition.gd b/addons/block_code/code_generation/block_definition.gd index b9a72e82..5bfbc794 100644 --- a/addons/block_code/code_generation/block_definition.gd +++ b/addons/block_code/code_generation/block_definition.gd @@ -28,6 +28,8 @@ const FORMAT_STRING_PATTERN = "\\[(?[^\\]]+)\\]|\\{const (? BlockExtension: diff --git a/addons/block_code/ui/main_panel.gd b/addons/block_code/ui/main_panel.gd index e276107d..cdc8e8f7 100644 --- a/addons/block_code/ui/main_panel.gd +++ b/addons/block_code/ui/main_panel.gd @@ -86,6 +86,11 @@ func _on_delete_node_button_pressed(): dialog.connect("confirmed", _on_delete_dialog_confirmed.bind(_context.block_code_node)) +func _on_advanced_checkbox_toggled(is_advanced: bool): + _picker.set_advanced(is_advanced) + _picker.reload_blocks() + + func _on_delete_dialog_confirmed(block_code_node: BlockCode): var parent_node = block_code_node.get_parent() diff --git a/addons/block_code/ui/main_panel.tscn b/addons/block_code/ui/main_panel.tscn index 78520466..838ee3fe 100644 --- a/addons/block_code/ui/main_panel.tscn +++ b/addons/block_code/ui/main_panel.tscn @@ -60,6 +60,10 @@ unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 +[node name="AdvancedCheckBox" type="CheckBox" parent="MarginContainer/HBoxContainer/ScriptVBox/HBoxContainer"] +layout_mode = 2 +text = "Advanced" + [node name="ShowScriptButton" type="Button" parent="MarginContainer/HBoxContainer/ScriptVBox/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 0 @@ -119,6 +123,7 @@ block_canvas_path = NodePath("../PickerSplit/MarginContainer/VBoxContainer/Block [connection signal="pressed" from="MarginContainer/HBoxContainer/ScriptVBox/HBoxContainer/ShowScriptButton" to="." method="_on_show_script_button_pressed"] [connection signal="pressed" from="MarginContainer/HBoxContainer/ScriptVBox/HBoxContainer/DeleteNodeButton" to="." method="_on_delete_node_button_pressed"] +[connection signal="toggled" from="MarginContainer/HBoxContainer/ScriptVBox/HBoxContainer/AdvancedCheckBox" to="." method="_on_advanced_checkbox_toggled"] [connection signal="add_block_code" from="MarginContainer/HBoxContainer/ScriptVBox/MarginContainer/PickerSplit/MarginContainer/VBoxContainer/BlockCanvas" to="." method="_on_block_canvas_add_block_code"] [connection signal="open_scene" from="MarginContainer/HBoxContainer/ScriptVBox/MarginContainer/PickerSplit/MarginContainer/VBoxContainer/BlockCanvas" to="." method="_on_block_canvas_open_scene"] [connection signal="replace_block_code" from="MarginContainer/HBoxContainer/ScriptVBox/MarginContainer/PickerSplit/MarginContainer/VBoxContainer/BlockCanvas" to="." method="_on_block_canvas_replace_block_code"] diff --git a/addons/block_code/ui/picker/picker.gd b/addons/block_code/ui/picker/picker.gd index 8d061d82..22783a44 100644 --- a/addons/block_code/ui/picker/picker.gd +++ b/addons/block_code/ui/picker/picker.gd @@ -38,6 +38,7 @@ var scroll_tween: Tween var _category_buttons: Dictionary # String, BlockCategoryButton var _category_displays: Dictionary # String, BlockCategoryDisplay +var _advanced_mode: bool = false func _ready() -> void: @@ -74,6 +75,10 @@ func _update_block_components(): for category in block_categories: var block_definitions := _context.block_script.get_blocks_in_category(category) + + if not _advanced_mode: + block_definitions = block_definitions.filter(func(definition): return not definition.is_advanced) + var order_override = CATEGORY_ORDER_OVERRIDE.get(category.name) if order_override: block_definitions.sort_custom(_sort_blocks_by_list_order.bind(order_override)) @@ -136,3 +141,8 @@ func _category_selected(category_name: String): func set_collapsed(collapsed: bool): _widget_container.visible = not collapsed + + +func set_advanced(advanced: bool): + _advanced_mode = advanced + reload_blocks()