Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions addons/script-ide/quickopen/filter_config.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
@tool
class_name QuickOpenFilterConfig
extends Resource

signal config_changed

@export var enable_extension_filter: bool = true:
set(value):
if enable_extension_filter != value:
enable_extension_filter = value
config_changed.emit()

@export var excluded_extensions: PackedStringArray = ["import"]:
set(value):
if excluded_extensions != value:
excluded_extensions = value
config_changed.emit()

@export var enable_path_filter: bool = true:
set(value):
if enable_path_filter != value:
enable_path_filter = value
config_changed.emit()

@export var excluded_paths: PackedStringArray = ["res://.godot/"]:
set(value):
if excluded_paths != value:
excluded_paths = value
config_changed.emit()
1 change: 1 addition & 0 deletions addons/script-ide/quickopen/filter_config.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://cggwfb8kcwr63
8 changes: 8 additions & 0 deletions addons/script-ide/quickopen/filter_config.tres
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[gd_resource type="Resource" script_class="QuickOpenFilterConfig" load_steps=2 format=3 uid="uid://ddxqnnl5stevc"]

[ext_resource type="Script" uid="uid://cggwfb8kcwr63" path="res://addons/script-ide/quickopen/filter_config.gd" id="1_config_script"]

[resource]
script = ExtResource("1_config_script")
excluded_extensions = PackedStringArray("import")
excluded_paths = PackedStringArray("res://.godot/")
36 changes: 36 additions & 0 deletions addons/script-ide/quickopen/quick_open_panel.gd
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ const STRUCTURE_END: StringName = &")"

var plugin: EditorPlugin

const FILTER_CONFIG_PATH: StringName = &"res://addons/script-ide/quickopen/filter_config.tres"

var filter_config: Resource

var scenes: Array[FileData]
var scripts: Array[FileData]
var resources: Array[FileData]
Expand Down Expand Up @@ -125,6 +129,19 @@ func on_show():
func rebuild_cache():
is_rebuild_cache = false

if ResourceLoader.exists(FILTER_CONFIG_PATH):
filter_config = load(FILTER_CONFIG_PATH)
else:
# If the configuration gd file does not exist, a default one is created.
var QuickOpenFilterConfig = load("res://addons/script-ide/quickopen/filter_config.gd")
var new_config = QuickOpenFilterConfig.new()
ResourceSaver.save(new_config, FILTER_CONFIG_PATH)
filter_config = new_config

# Connect a signal to automatically rebuild the cache on configuration changes.
if filter_config and not filter_config.is_connected(&"config_changed", schedule_rebuild):
filter_config.connect(&"config_changed", schedule_rebuild)

all_files.clear()
scenes.clear()
scripts.clear()
Expand Down Expand Up @@ -163,6 +180,25 @@ func build_file_cache_dir(dir: EditorFileSystemDirectory):
if (search_option_btn.get_selected_id() == 0 && file.begins_with(ADDONS)):
continue

# Exclude files based on configuration files.
if filter_config != null:
# Check if exclusions are by extension.
if filter_config.enable_extension_filter:
var extension: String = file.get_extension()
if extension in filter_config.excluded_extensions:
continue

# Check if the path is excluded.
if filter_config.enable_path_filter:
var is_excluded_by_path: bool = false
for path in filter_config.excluded_paths:
if not path.is_empty() and file.begins_with(path):
is_excluded_by_path = true
break
if is_excluded_by_path:
continue


var last_delimiter: int = file.rfind(&"/")

var file_name: String = file.substr(last_delimiter + 1)
Expand Down