mirror of
https://github.com/Relintai/godot-resources-as-sheets-plugin.git
synced 2025-04-08 17:41:50 +02:00
Implement multiline filter/process
This commit is contained in:
parent
8fc923da8b
commit
c42d6b21d5
@ -87,9 +87,6 @@ func display_folder(folderpath : String, sort_by : String = "", sort_reverse : b
|
||||
|
||||
if folderpath.ends_with(".tres") and !folderpath.ends_with(ResourceTablesImport.SUFFIX):
|
||||
folderpath = folderpath.get_base_dir() + "/"
|
||||
|
||||
if search_cond == null:
|
||||
_on_search_cond_text_submitted("true")
|
||||
|
||||
node_recent_paths.add_path_to_recent(folderpath)
|
||||
first_row = node_page_manager.first_row
|
||||
@ -150,7 +147,7 @@ func fill_property_data(res):
|
||||
|
||||
|
||||
func insert_row_sorted(res : Resource, rows : Array, sort_by : String, sort_reverse : bool):
|
||||
if !search_cond.can_show(res, rows.size()):
|
||||
if search_cond != null && !search_cond.can_show(res, rows.size()):
|
||||
return
|
||||
|
||||
for i in rows.size():
|
||||
@ -402,34 +399,6 @@ func _get_row_resources(row_indices) -> Array:
|
||||
return arr
|
||||
|
||||
|
||||
func _on_search_cond_text_submitted(new_text : String):
|
||||
var new_script := GDScript.new()
|
||||
new_script.source_code = "static func can_show(res, index):\n\treturn " + new_text
|
||||
new_script.reload()
|
||||
|
||||
search_cond = new_script
|
||||
refresh()
|
||||
|
||||
|
||||
func _on_process_expr_text_submitted(new_text : String):
|
||||
if new_text == "":
|
||||
new_text = "true"
|
||||
|
||||
var new_script := GDScript.new()
|
||||
new_script.source_code = "static func get_result(value, res, row_index, cell_index):\n\treturn " + new_text
|
||||
new_script.reload()
|
||||
|
||||
var new_script_instance = new_script.new()
|
||||
var values = get_edited_cells_values()
|
||||
var cur_row := 0
|
||||
|
||||
var edited_rows = _selection.get_edited_rows()
|
||||
for i in values.size():
|
||||
values[i] = new_script_instance.get_result(values[i], rows[edited_rows[i]], edited_rows[i], i)
|
||||
|
||||
set_edited_cells_values(values)
|
||||
|
||||
|
||||
func _on_File_pressed():
|
||||
node_folder_path.get_parent().get_parent().visible = !node_folder_path.get_parent().get_parent().visible
|
||||
|
||||
|
@ -1,9 +1,10 @@
|
||||
[gd_scene load_steps=29 format=3 uid="uid://tmleonv20aqk"]
|
||||
[gd_scene load_steps=30 format=3 uid="uid://tmleonv20aqk"]
|
||||
|
||||
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/editor_view.gd" id="1_wfx75"]
|
||||
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/editor_color_setter.gd" id="2_t2s7k"]
|
||||
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/editor_icon_button.gd" id="3_7ja2l"]
|
||||
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/main_screen/recent_paths.gd" id="4_umoob"]
|
||||
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/main_screen/expression_textfield.gd" id="5_faq75"]
|
||||
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/main_screen/table_pages.gd" id="5_ka2yn"]
|
||||
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/main_screen/column_header_manager.gd" id="6_emnmd"]
|
||||
[ext_resource type="PackedScene" uid="uid://d1s6oihqedvo5" path="res://addons/resources_spreadsheet_view/main_screen/table_header.tscn" id="7_3dx0v"]
|
||||
@ -261,10 +262,14 @@ mouse_filter = 0
|
||||
mouse_default_cursor_shape = 16
|
||||
text = "(?)"
|
||||
|
||||
[node name="SearchCond" type="LineEdit" parent="HeaderContentSplit/VBoxContainer/Search/Search"]
|
||||
[node name="Filter" type="HBoxContainer" parent="HeaderContentSplit/VBoxContainer/Search/Search"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
text = "true"
|
||||
script = ExtResource("5_faq75")
|
||||
editor_view_path = NodePath("../../../../..")
|
||||
title = "func f(res : Resource, index : int):"
|
||||
default_text = "true"
|
||||
default_text_ml = "return true"
|
||||
|
||||
[node name="VSeparator" type="VSeparator" parent="HeaderContentSplit/VBoxContainer/Search/Search"]
|
||||
layout_mode = 2
|
||||
@ -290,9 +295,15 @@ mouse_filter = 0
|
||||
mouse_default_cursor_shape = 16
|
||||
text = "(?)"
|
||||
|
||||
[node name="ProcessExpr" type="LineEdit" parent="HeaderContentSplit/VBoxContainer/Search/Search"]
|
||||
[node name="Process" type="HBoxContainer" parent="HeaderContentSplit/VBoxContainer/Search/Search"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
script = ExtResource("5_faq75")
|
||||
editor_view_path = NodePath("../../../../..")
|
||||
mode = 1
|
||||
title = "func f(value : Var, res : Resource, index : int):"
|
||||
default_text = "value"
|
||||
default_text_ml = "return value"
|
||||
|
||||
[node name="HBoxContainer3" type="HBoxContainer" parent="HeaderContentSplit/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
@ -548,8 +559,6 @@ metadata/_edit_lock_ = true
|
||||
[connection signal="pressed" from="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer/SelectDir" to="Control/FileDialog" method="popup_centered"]
|
||||
[connection signal="pressed" from="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer/DeletePath" to="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer2/RecentPaths" method="remove_selected_path_from_recent"]
|
||||
[connection signal="pressed" from="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer2/ImportExport" to="Control/FileDialogText" method="popup_centered"]
|
||||
[connection signal="text_submitted" from="HeaderContentSplit/VBoxContainer/Search/Search/SearchCond" to="." method="_on_search_cond_text_submitted"]
|
||||
[connection signal="text_submitted" from="HeaderContentSplit/VBoxContainer/Search/Search/ProcessExpr" to="." method="_on_process_expr_text_submitted"]
|
||||
[connection signal="pressed" from="HeaderContentSplit/VBoxContainer/HBoxContainer3/Refresh" to="." method="_on_path_text_submitted"]
|
||||
[connection signal="value_changed" from="HeaderContentSplit/VBoxContainer/HBoxContainer3/Pages/LineEdit" to="HeaderContentSplit/VBoxContainer/HBoxContainer3/Pages" method="_on_LineEdit_value_changed"]
|
||||
[connection signal="dir_selected" from="Control/FileDialog" to="." method="_on_FileDialog_dir_selected"]
|
||||
|
@ -0,0 +1,118 @@
|
||||
@tool
|
||||
extends Control
|
||||
|
||||
@export var editor_view_path : NodePath
|
||||
|
||||
@export_enum("Filter", "Process", "Sort") var mode := 0
|
||||
@export var title := ""
|
||||
@export var default_text := "":
|
||||
set(v):
|
||||
default_text = v
|
||||
if _textfield == null:
|
||||
await ready
|
||||
|
||||
_textfield.text = v
|
||||
|
||||
@export_multiline var default_text_ml := "":
|
||||
set(v):
|
||||
default_text_ml = v
|
||||
if _textfield_ml == null:
|
||||
await ready
|
||||
|
||||
_textfield_ml.text = v
|
||||
|
||||
var _textfield : LineEdit
|
||||
var _textfield_ml : TextEdit
|
||||
var _togglable_popup : PopupPanel
|
||||
|
||||
|
||||
func _enter_tree():
|
||||
var toggle_button := Button.new()
|
||||
var popup_box := VBoxContainer.new()
|
||||
var popup_buttons_box := HBoxContainer.new()
|
||||
var title_label := Label.new()
|
||||
var submit_button := Button.new()
|
||||
_textfield = LineEdit.new()
|
||||
_togglable_popup = PopupPanel.new()
|
||||
_textfield_ml = TextEdit.new()
|
||||
|
||||
add_child(_textfield)
|
||||
add_child(toggle_button)
|
||||
_textfield.add_child(_togglable_popup)
|
||||
_togglable_popup.add_child(popup_box)
|
||||
popup_box.add_child(title_label)
|
||||
popup_box.add_child(_textfield_ml)
|
||||
popup_box.add_child(popup_buttons_box)
|
||||
popup_buttons_box.add_child(submit_button)
|
||||
|
||||
title_label.text = title
|
||||
|
||||
toggle_button.icon = get_theme_icon("Collapse", "EditorIcons")
|
||||
toggle_button.pressed.connect(_on_expand_pressed)
|
||||
|
||||
submit_button.text = "Run multiline!"
|
||||
submit_button.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
submit_button.pressed.connect(_on_text_submitted)
|
||||
|
||||
_textfield.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
_textfield.text_submitted.connect(_on_text_submitted.unbind(1))
|
||||
|
||||
_textfield_ml.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
_textfield_ml.size_flags_vertical = Control.SIZE_EXPAND_FILL
|
||||
|
||||
|
||||
func _on_expand_pressed():
|
||||
_togglable_popup.popup(Rect2i(_textfield.get_screen_position(), Vector2(size.x, 256.0)))
|
||||
|
||||
|
||||
|
||||
func _on_text_submitted():
|
||||
[_table_filter, _table_process][mode].call()
|
||||
|
||||
|
||||
func _get_script_source_code(first_line : String):
|
||||
var new_text := ""
|
||||
if !_togglable_popup.visible:
|
||||
new_text = _textfield.text
|
||||
if new_text == "":
|
||||
new_text = default_text
|
||||
|
||||
return first_line + "\treturn " + new_text
|
||||
|
||||
else:
|
||||
new_text = _textfield_ml.text
|
||||
if new_text == "":
|
||||
new_text = default_text_ml
|
||||
|
||||
var text_split := new_text.split("\n")
|
||||
for i in text_split.size():
|
||||
text_split[i] = "\t" + text_split[i]
|
||||
|
||||
return first_line + "\n".join(text_split)
|
||||
|
||||
|
||||
func _table_filter():
|
||||
var new_script := GDScript.new()
|
||||
new_script.source_code = _get_script_source_code("static func can_show(res, index):\n")
|
||||
new_script.reload()
|
||||
|
||||
var editor_view := get_node(editor_view_path)
|
||||
editor_view.search_cond = new_script
|
||||
editor_view.refresh()
|
||||
|
||||
|
||||
func _table_process():
|
||||
var new_script := GDScript.new()
|
||||
new_script.source_code = _get_script_source_code("static func get_result(value, res, row_index, cell_index):\n")
|
||||
new_script.reload()
|
||||
|
||||
var editor_view := get_node(editor_view_path)
|
||||
var new_script_instance = new_script.new()
|
||||
var values = editor_view.get_edited_cells_values()
|
||||
var cur_row := 0
|
||||
|
||||
var edited_rows = editor_view._selection.get_edited_rows()
|
||||
for i in values.size():
|
||||
values[i] = new_script_instance.get_result(values[i], editor_view.rows[edited_rows[i]], edited_rows[i], i)
|
||||
|
||||
editor_view.set_edited_cells_values(values)
|
Loading…
Reference in New Issue
Block a user