diff --git a/addons/script-ide/quickopen/filter_config.gd b/addons/script-ide/quickopen/filter_config.gd new file mode 100644 index 0000000..fdd13a6 --- /dev/null +++ b/addons/script-ide/quickopen/filter_config.gd @@ -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() diff --git a/addons/script-ide/quickopen/filter_config.gd.uid b/addons/script-ide/quickopen/filter_config.gd.uid new file mode 100644 index 0000000..44079ed --- /dev/null +++ b/addons/script-ide/quickopen/filter_config.gd.uid @@ -0,0 +1 @@ +uid://cggwfb8kcwr63 diff --git a/addons/script-ide/quickopen/filter_config.tres b/addons/script-ide/quickopen/filter_config.tres new file mode 100644 index 0000000..b26ee81 --- /dev/null +++ b/addons/script-ide/quickopen/filter_config.tres @@ -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/") diff --git a/addons/script-ide/quickopen/quick_open_panel.gd b/addons/script-ide/quickopen/quick_open_panel.gd index 4bb877a..86c8f5b 100644 --- a/addons/script-ide/quickopen/quick_open_panel.gd +++ b/addons/script-ide/quickopen/quick_open_panel.gd @@ -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] @@ -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() @@ -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)