98 lines
3.4 KiB
GDScript3
98 lines
3.4 KiB
GDScript3
|
@tool
|
||
|
extends "./TreeView.gd"
|
||
|
|
||
|
enum {
|
||
|
NAME_COLUMN,
|
||
|
BASE_NODE_TYPE_COLUMN,
|
||
|
NODE_COUNT_COLUMN,
|
||
|
NODE_CONNECTIONS_COLUMN,
|
||
|
LOCAL_TO_SCENE_COLUMN,
|
||
|
SIZE_COLUMN
|
||
|
}
|
||
|
|
||
|
var total_scenes: TreeItem
|
||
|
var total_nodes: TreeItem
|
||
|
var total_connections: TreeItem
|
||
|
var total_size: TreeItem
|
||
|
|
||
|
func _ready() -> void:
|
||
|
tree = $VSplitContainer/Tree as Tree
|
||
|
summary_tree = $VSplitContainer/SummaryTree as Tree
|
||
|
|
||
|
tree.set_column_title(NAME_COLUMN, "Scene")
|
||
|
tree.set_column_title(BASE_NODE_TYPE_COLUMN, "Base node")
|
||
|
tree.set_column_title(NODE_COUNT_COLUMN, "Node count")
|
||
|
tree.set_column_title(NODE_CONNECTIONS_COLUMN, "Node connection count")
|
||
|
tree.set_column_title(LOCAL_TO_SCENE_COLUMN, "Local to scene")
|
||
|
tree.set_column_title(SIZE_COLUMN, "Size")
|
||
|
tree.set_column_titles_visible(true)
|
||
|
tree.hide_root = true
|
||
|
|
||
|
tree.item_activated.connect(_on_item_activated)
|
||
|
tree.column_title_clicked.connect(_on_column_title_clicked)
|
||
|
|
||
|
var root: TreeItem = summary_tree.create_item()
|
||
|
total_scenes = summary_tree.create_item(root)
|
||
|
total_nodes = summary_tree.create_item(root)
|
||
|
total_connections = summary_tree.create_item(root)
|
||
|
total_size = summary_tree.create_item(root)
|
||
|
|
||
|
total_scenes.set_text(0, "Total scenes")
|
||
|
total_nodes.set_text(0, "Total nodes")
|
||
|
total_connections.set_text(0, "Total connections")
|
||
|
total_size.set_text(0, "Total size")
|
||
|
summary_tree.hide_root = true
|
||
|
|
||
|
func display(stats: ProjectStatistics) -> void:
|
||
|
super.display(stats)
|
||
|
total_scenes.set_text(1, str(stats.scenes.size()))
|
||
|
total_nodes.set_text(1, str(stats.get_total_nodes()))
|
||
|
total_connections.set_text(1, str(stats.get_total_connections()))
|
||
|
total_size.set_text(1, String.humanize_size(stats.get_total_scenes_size()))
|
||
|
|
||
|
func update_tree(stats: ProjectStatistics) -> void:
|
||
|
tree.clear()
|
||
|
var root: TreeItem = tree.create_item()
|
||
|
for file_stats in stats.scenes:
|
||
|
var item: TreeItem = tree.create_item(root)
|
||
|
item.set_cell_mode(LOCAL_TO_SCENE_COLUMN, TreeItem.CELL_MODE_CHECK)
|
||
|
|
||
|
item.set_text(NAME_COLUMN, file_stats.get_name())
|
||
|
item.set_tooltip_text(NAME_COLUMN, file_stats.path)
|
||
|
item.set_metadata(NAME_COLUMN, file_stats.path)
|
||
|
|
||
|
item.set_text(BASE_NODE_TYPE_COLUMN, file_stats.base_node_type)
|
||
|
item.set_metadata(BASE_NODE_TYPE_COLUMN, file_stats.base_node_type)
|
||
|
|
||
|
item.set_text(NODE_COUNT_COLUMN, str(file_stats.node_count))
|
||
|
item.set_text(NODE_CONNECTIONS_COLUMN, str(file_stats.connection_count))
|
||
|
item.set_checked(LOCAL_TO_SCENE_COLUMN, file_stats.local_to_scene)
|
||
|
|
||
|
_format_size(item, SIZE_COLUMN, file_stats.size)
|
||
|
|
||
|
func update_icons() -> void:
|
||
|
var root: TreeItem = tree.get_root()
|
||
|
if not root:
|
||
|
return
|
||
|
var children:= root.get_children()
|
||
|
for next in children:
|
||
|
next.set_icon(NAME_COLUMN, get_theme_icon("PackedScene", "EditorIcons"))
|
||
|
next.set_icon(BASE_NODE_TYPE_COLUMN, get_theme_icon(next.get_metadata(BASE_NODE_TYPE_COLUMN), "EditorIcons"))
|
||
|
next.set_icon(NODE_COUNT_COLUMN, get_theme_icon("Node", "EditorIcons"))
|
||
|
next.set_icon(NODE_CONNECTIONS_COLUMN, get_theme_icon("Slot", "EditorIcons"))
|
||
|
|
||
|
func _sort_by_column(column: int) -> void:
|
||
|
match column:
|
||
|
NAME_COLUMN:
|
||
|
stats.scenes.sort_custom(sort_name)
|
||
|
BASE_NODE_TYPE_COLUMN:
|
||
|
stats.scenes.sort_custom(sort_node_type)
|
||
|
NODE_COUNT_COLUMN:
|
||
|
stats.scenes.sort_custom(sort_node_count)
|
||
|
NODE_CONNECTIONS_COLUMN:
|
||
|
stats.scenes.sort_custom(sort_connection_count)
|
||
|
LOCAL_TO_SCENE_COLUMN:
|
||
|
stats.scenes.sort_custom(sort_local_to_scene)
|
||
|
SIZE_COLUMN:
|
||
|
stats.scenes.sort_custom(sort_size)
|