Skip to content

Commit

Permalink
Added support for folder and none sorting.
Browse files Browse the repository at this point in the history
  • Loading branch information
firedfromlife committed Aug 1, 2024
1 parent a312db7 commit be989fd
Show file tree
Hide file tree
Showing 4 changed files with 151 additions and 46 deletions.
27 changes: 23 additions & 4 deletions addons/dialogic/Editor/Common/side_bar.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -86,13 +86,33 @@ flat = true
icon_alignment = 1
expand_icon = true

[node name="Search" type="LineEdit" parent="VBoxPrimary/Margin/VSplitContainer/VBox"]
[node name="HBoxSearchSort" type="HBoxContainer" parent="VBoxPrimary/Margin/VSplitContainer/VBox"]
layout_mode = 2

[node name="Search" type="LineEdit" parent="VBoxPrimary/Margin/VSplitContainer/VBox/HBoxSearchSort"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
tooltip_text = "Filter Resources"
placeholder_text = "Filter Resources"
caret_blink = true
caret_blink_interval = 0.5

[node name="SortOption" type="OptionButton" parent="VBoxPrimary/Margin/VSplitContainer/VBox/HBoxSearchSort"]
unique_name_in_owner = true
layout_mode = 2
tooltip_text = "Sort
- Default: Sort alphabetically split into Characters & Timeilnes.
- Folder: Sort alphabetically by parent directory.
- None: Sort alphabetically with no categories."
selected = 0
item_count = 3
popup/item_0/text = "Default"
popup/item_1/text = "Folder"
popup/item_1/id = 1
popup/item_2/text = "None"
popup/item_2/id = 2

[node name="ResourceTree" type="Tree" parent="VBoxPrimary/Margin/VSplitContainer/VBox"]
unique_name_in_owner = true
layout_mode = 2
Expand All @@ -116,7 +136,6 @@ layout_mode = 2
size_flags_horizontal = 3
item_count = 1
popup/item_0/text = "Alphabetical (All)"
popup/item_0/id = 0

[node name="ContentListSection" type="VBoxContainer" parent="VBoxPrimary/Margin/VSplitContainer"]
unique_name_in_owner = true
Expand Down Expand Up @@ -145,7 +164,7 @@ unique_name_in_owner = true
size = Vector2i(164, 100)

[connection signal="gui_input" from="VBoxPrimary/Margin/VSplitContainer/VBox/Logo" to="." method="_on_logo_gui_input"]
[connection signal="text_changed" from="VBoxPrimary/Margin/VSplitContainer/VBox/Search" to="." method="_on_search_text_changed"]
[connection signal="text_submitted" from="VBoxPrimary/Margin/VSplitContainer/VBox/Search" to="." method="_on_search_text_submitted"]
[connection signal="text_changed" from="VBoxPrimary/Margin/VSplitContainer/VBox/HBoxSearchSort/Search" to="." method="_on_search_text_changed"]
[connection signal="text_submitted" from="VBoxPrimary/Margin/VSplitContainer/VBox/HBoxSearchSort/Search" to="." method="_on_search_text_submitted"]
[connection signal="pressed" from="VBoxPrimary/CurrentVersion" to="." method="_on_current_version_pressed"]
[connection signal="id_pressed" from="RightClickMenu" to="." method="_on_right_click_menu_id_pressed"]
159 changes: 122 additions & 37 deletions addons/dialogic/Editor/Common/sidebar.gd
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
@tool
class_name DialogicEditorSidebar extends Control
class_name DialogicSidebar extends Control

## Script that handles the editor sidebar.

Expand All @@ -11,13 +11,16 @@ signal show_sidebar(show: bool)

@onready var editors_manager = get_parent().get_parent()
@onready var resource_tree: Tree = %ResourceTree
@onready var sort_option: OptionButton = %SortOption
var current_resource_list: Array = []
var sort_mode: SortMode = SortMode.Default


func _ready() -> void:
if owner.get_parent() is SubViewport:
if owner != null and owner.get_parent() is SubViewport:
return
if editors_manager is SubViewportContainer:
return

## CONNECTIONS

editors_manager.resource_opened.connect(_on_editors_resource_opened)
Expand All @@ -26,6 +29,8 @@ func _ready() -> void:
resource_tree.item_activated.connect(_on_resources_tree_item_activated)
resource_tree.item_mouse_selected.connect(_on_resources_tree_item_clicked)

sort_option.item_selected.connect(_on_sort_changed)

%ContentList.item_selected.connect(
func(idx: int): content_item_activated.emit(%ContentList.get_item_text(idx))
)
Expand Down Expand Up @@ -72,6 +77,10 @@ func _ready() -> void:
await get_tree().process_frame
if DialogicUtil.get_editor_setting("sidebar_collapsed", false):
_hide_sidebar()
if DialogicUtil.get_editor_setting("sidebar_sort_mode", 0) != 0:
sort_option.select(DialogicUtil.get_editor_setting("sidebar_sort_mode", 0))
sort_mode = DialogicUtil.get_editor_setting("sidebar_sort_mode", 0)
update_resource_list()


################################################################################
Expand Down Expand Up @@ -113,6 +122,13 @@ func clean_resource_list(resources_list: Array = []) -> PackedStringArray:


func update_resource_list(resources_list: PackedStringArray = []) -> void:
print_rich(
(
"[b]Updating resource list[/b]:\n\t [i]Resource List: [/i]%s\n\t[i]Resource List D: [/i]%s"
% [resources_list, DialogicUtil.get_editor_setting("last_resources", [])]
)
)

var filter: String = %Search.text
var current_file := ""
if editors_manager.current_editor and editors_manager.current_editor.current_resource:
Expand Down Expand Up @@ -153,47 +169,81 @@ func update_resource_list(resources_list: PackedStringArray = []) -> void:
var item := ResourceListItem.new()
item.text = timeline_name
item.icon = get_theme_icon("TripleBar", "EditorIcons")
# item.icon = load("res://addons/dialogic/Editor/Images/Resources/timeline.svg")
item.metadata = timeline_directory[timeline_name]
item.tooltip = timeline_directory[timeline_name]
timeline_items.append(item)

character_items.sort_custom(_sort_by_item_text)
timeline_items.sort_custom(_sort_by_item_text)

# TREE
var root: TreeItem = resource_tree.create_item()

if character_items.size() > 0:
var character_tree = resource_tree.create_item(root)
if character_tree == null:
return
character_tree.set_text(0, "Characters")
character_tree.set_icon(0, get_theme_icon("Folder", "EditorIcons"))
character_tree.set_custom_bg_color(0, get_theme_color("base_color", "Editor"))
for item in character_items:
var character_item = resource_tree.create_item(character_tree)
character_item.set_text(0, item.text)
character_item.set_icon(0, item.icon)
character_item.set_metadata(0, item.metadata)
character_item.set_tooltip_text(0, item.tooltip)
if item.metadata == current_file:
%CurrentResource.text = item.metadata.get_file()
resource_tree.set_selected(character_item, 0)
if timeline_items.size() > 0:
var timeline_tree = resource_tree.create_item(root) as TreeItem
timeline_tree.set_text(0, "Timelines")
timeline_tree.set_icon(0, get_theme_icon("Folder", "EditorIcons"))
timeline_tree.set_custom_bg_color(0, get_theme_color("base_color", "Editor"))
for item in timeline_items:
var timeline_item = resource_tree.create_item(timeline_tree) as TreeItem
timeline_item.set_text(0, item.text)
timeline_item.set_icon(0, item.icon)
timeline_item.set_metadata(0, item.metadata)
timeline_item.set_tooltip_text(0, item.tooltip)
if sort_mode == SortMode.Default:
character_items.sort_custom(_sort_by_item_text)
timeline_items.sort_custom(_sort_by_item_text)
if character_items.size() > 0:
var character_tree = resource_tree.create_item(root)
if character_tree == null:
return
character_tree.set_text(0, "Characters")
character_tree.set_icon(0, get_theme_icon("Folder", "EditorIcons"))
character_tree.set_custom_bg_color(0, get_theme_color("base_color", "Editor"))
for item in character_items:
var character_item = resource_tree.create_item(character_tree)
character_item.set_text(0, item.text)
character_item.set_icon(0, item.icon)
character_item.set_metadata(0, item.metadata)
character_item.set_tooltip_text(0, item.tooltip)
if item.metadata == current_file:
%CurrentResource.text = item.metadata.get_file()
resource_tree.set_selected(character_item, 0)
if timeline_items.size() > 0:
var timeline_tree = resource_tree.create_item(root) as TreeItem
timeline_tree.set_text(0, "Timelines")
timeline_tree.set_icon(0, get_theme_icon("Folder", "EditorIcons"))
timeline_tree.set_custom_bg_color(0, get_theme_color("base_color", "Editor"))
for item in timeline_items:
var timeline_item = resource_tree.create_item(timeline_tree) as TreeItem
timeline_item.set_text(0, item.text)
timeline_item.set_icon(0, item.icon)
timeline_item.set_metadata(0, item.metadata)
timeline_item.set_tooltip_text(0, item.tooltip)
if item.metadata == current_file:
%CurrentResource.text = item.metadata.get_file()
resource_tree.set_selected(timeline_item, 0)

if sort_mode == SortMode.None:
var all_items := character_items + timeline_items
all_items.sort_custom(_sort_by_item_text)
for item in all_items:
var tree_item = resource_tree.create_item(root)
tree_item.set_text(0, item.text)
tree_item.set_icon(0, item.icon)
tree_item.set_metadata(0, item.metadata)
tree_item.set_tooltip_text(0, item.tooltip)
if item.metadata == current_file:
%CurrentResource.text = item.metadata.get_file()
resource_tree.set_selected(timeline_item, 0)

resource_tree.set_selected(tree_item, 0)
if sort_mode == SortMode.Folder:
var all_items := character_items + timeline_items
var dirs := {}
for item in all_items:
var dir := item.get_parent_directory() as String
if !dirs.has(dir):
dirs[dir] = []
dirs[dir].append(item)
for dir in dirs:
var dir_item = resource_tree.create_item(root)
dir_item.set_text(0, dir)
dir_item.set_icon(0, get_theme_icon("Folder", "EditorIcons"))
dir_item.set_custom_bg_color(0, get_theme_color("base_color", "Editor"))
for item in dirs[dir]:
var tree_item = resource_tree.create_item(dir_item)
tree_item.set_text(0, item.text)
tree_item.set_icon(0, item.icon)
tree_item.set_metadata(0, item.metadata)
tree_item.set_tooltip_text(0, item.tooltip)
if item.metadata == current_file:
%CurrentResource.text = item.metadata.get_file()
resource_tree.set_selected(tree_item, 0)
if %CurrentResource.text != "No Resource":
%CurrentResource.add_theme_color_override(
"font_uneditable_color", get_theme_color("font_color", "Editor")
Expand All @@ -207,7 +257,6 @@ func _on_resources_tree_item_activated() -> void:
var item := resource_tree.get_selected()
if item.get_metadata(0) == null:
return
# editors_manager.edit_resource(load(item.get_metadata(0)))
edit_resource(item.get_metadata(0))


Expand All @@ -227,6 +276,7 @@ func _on_resources_tree_item_clicked(_pos: Vector2, mouse_button_index: int) ->
if mouse_button_index == MOUSE_BUTTON_RIGHT:
%RightClickMenu.popup_on_parent(Rect2(get_global_mouse_position(), Vector2()))
(%RightClickMenu as PopupMenu).set_meta("item_clicked", resource_tree.get_selected())

return


Expand Down Expand Up @@ -325,6 +375,16 @@ func _on_right_click_menu_id_pressed(id: int) -> void:
)


func _on_sort_changed(idx: int) -> void:
if (SortMode as Dictionary).values().has(idx):
sort_mode = idx
DialogicUtil.set_editor_setting("sidebar_sort_mode", idx)
update_resource_list()
else:
sort_mode = SortMode.Default
print("Invalid sort mode: ", idx)


func _sort_by_item_text(a: ResourceListItem, b: ResourceListItem) -> bool:
return a.text < b.text

Expand All @@ -336,19 +396,44 @@ func edit_resource(resource_item: Variant) -> void:
editors_manager.edit_resource(load(resource_item))


enum SortMode {
Default,
Folder,
None,
}


class ResourceListItem:
extends Object

var text: String
var index: int = -1
var icon: Texture
var metadata: String
var tooltip: String

func _to_string() -> String:
return JSON.stringify(
{
"text": text,
"index": index,
"icon": icon.resource_path,
"metadata": metadata,
"tooltip": tooltip,
"parent_dir": get_parent_directory()
},
"\t",
false
)

func add_to_item_list(item_list: ItemList, current_file: String) -> void:
item_list.add_item(text, icon)
item_list.set_item_metadata(item_list.item_count - 1, metadata)
item_list.set_item_tooltip(item_list.item_count - 1, tooltip)

func get_parent_directory() -> String:
return (metadata.get_base_dir() as String).split("/")[-1]

func current_file(sidebar: Control, resource_list: ItemList, current_file: String) -> void:
if metadata == current_file:
resource_list.select(index)
Expand Down
3 changes: 2 additions & 1 deletion addons/dialogic/Editor/editor_main.gd
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,14 @@ var editors_manager: Control = null

var editor_file_dialog: EditorFileDialog

@onready var sidebar := %Sidebar as DialogicSidebar

func _ready() -> void:
if get_parent() is SubViewport:
return

## CONNECTIONS
%Sidebar.show_sidebar.connect(_on_sidebar_toggled)
sidebar.show_sidebar.connect(_on_sidebar_toggled)

## REFERENCES
editors_manager = $EditorsManager
Expand Down
8 changes: 4 additions & 4 deletions addons/dialogic/Editor/editor_main.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
[ext_resource type="Script" path="res://addons/dialogic/Editor/Common/update_manager.gd" id="14_l6b1p"]
[ext_resource type="PackedScene" uid="uid://vv3m5m68fwg7" path="res://addons/dialogic/Editor/Common/update_install_window.tscn" id="15_cu4xj"]

[sub_resource type="Image" id="Image_0ofnu"]
[sub_resource type="Image" id="Image_uqxml"]
data = {
"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0),
"format": "RGBA8",
Expand All @@ -25,9 +25,9 @@ data = {
}

[sub_resource type="ImageTexture" id="ImageTexture_drcn6"]
image = SubResource("Image_0ofnu")
image = SubResource("Image_uqxml")

[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_hrkym"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5bs7k"]
content_margin_left = 8.0
content_margin_top = 8.0
content_margin_right = 8.0
Expand Down Expand Up @@ -134,7 +134,7 @@ content_scale_aspect = 4
script = ExtResource("10_xbkrt")

[node name="Manager" parent="ReferenceManager" instance=ExtResource("10_l1rf8")]
theme_override_styles/panel = SubResource("StyleBoxFlat_hrkym")
theme_override_styles/panel = SubResource("StyleBoxFlat_5bs7k")

[node name="UpdateManager" type="Node" parent="."]
script = ExtResource("14_l6b1p")
Expand Down

0 comments on commit be989fd

Please sign in to comment.