Added hierarchy pane

This commit is contained in:
RodZill4 2020-03-02 23:01:27 +01:00
parent 6148004b45
commit 8283c744d3
5 changed files with 88 additions and 1 deletions

View File

@ -7,6 +7,7 @@ Base class for texture generators, that defines their API
"""
signal parameter_changed
signal output_changed(index)
class InputPort:
var generator : MMGenBase = null
@ -49,6 +50,9 @@ func can_be_deleted() -> bool:
func toggle_editable() -> bool:
return false
func is_template() -> bool:
return model != null
func is_editable() -> bool:
return false
@ -117,6 +121,7 @@ func notify_output_change(output_index : int) -> void:
var targets = get_targets(output_index)
for target in targets:
target.generator.source_changed(target.input_index)
emit_signal("output_changed", output_index)
func source_changed(__) -> void:
emit_signal("parameter_changed", "__input_changed__", 0)

View File

@ -16,6 +16,7 @@ onready var layout = $VBoxContainer/Layout
var library
var preview_2d
var preview_3d
var hierarchy
onready var preview_2d_background = $VBoxContainer/Layout/SplitRight/ProjectsPane/Preview2D
onready var preview_2d_background_button = $VBoxContainer/Layout/SplitRight/ProjectsPane/PreviewUI/Preview2DButton
@ -130,6 +131,8 @@ func _ready() -> void:
library = layout.get_pane("Library")
preview_2d = layout.get_pane("Preview2D")
preview_3d = layout.get_pane("Preview3D")
hierarchy = layout.get_pane("Hierarchy")
hierarchy.connect("group_selected", self, "on_group_selected")
# Load recent projects
load_recents()
@ -521,6 +524,7 @@ func _on_PopupMenu_id_pressed(id) -> void:
# Preview
func update_preview() -> void:
hierarchy.update_from_graph_edit(get_current_graph_edit())
var status
need_update = true
if updating:
@ -587,6 +591,11 @@ func _on_Projects_tab_changed(tab) -> void:
current_tab = new_tab
update_preview()
func on_group_selected(generator) -> void:
var graph_edit : MMGraphEdit = get_current_graph_edit()
if graph_edit != null:
graph_edit.edit_subgraph(generator)
func _exit_tree() -> void:
# Save the window position and size to remember it when restarting the application
config_cache.set_value("window", "screen", OS.current_screen)

View File

@ -9,7 +9,8 @@ const PANE_POSITIONS = {
const PANES = [
{ name="Library", scene=preload("res://material_maker/library.tscn"), position="TopLeft" },
{ name="Preview2D", scene=preload("res://material_maker/preview/preview_2d_panel.tscn"), position="BottomLeft" },
{ name="Preview3D", scene=preload("res://material_maker/preview/preview_3d_panel.tscn"), position="BottomLeft" }
{ name="Preview3D", scene=preload("res://material_maker/preview/preview_3d_panel.tscn"), position="BottomLeft" },
{ name="Hierarchy", scene=preload("res://material_maker/widgets/graph_tree/hierarchy_pane.tscn"), position="TopRight" }
]
var panes = {}

View File

@ -0,0 +1,57 @@
extends Tree
signal group_selected
func update_from_graph_edit(graph_edit) -> void:
set_column_expand(0, true)
# columns = 4
# for i in range(1, 4):
# set_column_expand(i, false)
# set_column_min_width(i, 24)
if graph_edit == null:
return
var file_name = "PTex"
if graph_edit.save_path != null:
file_name = graph_edit.save_path.get_file()
fill_tree(graph_edit.top_generator, graph_edit.generator, file_name)
func fill_tree(top : MMGenGraph, selected : MMGenGraph, top_name : String) -> void:
clear()
if top == null or selected == null:
return
var root : TreeItem = create_item(null)
root.set_text(0, top_name)
if top == selected:
root.set_custom_color(0, Color(0.5, 0.5, 1))
else:
root.set_custom_color(0, Color(1, 1, 1))
root.set_metadata(0, top)
fill_item(root, top, selected)
#func set_icon(item, generator):
# var result = generator.render(0, 24, true)
# while result is GDScriptFunctionState:
# result = yield(result, "completed")
# var tex = ImageTexture.new()
# result.copy_to_texture(tex)
# result.release()
# item.set_icon(3, tex)
func fill_item(parent : TreeItem, generator : MMGenGraph, selected : MMGenGraph) -> void:
for c in generator.get_children():
if c is MMGenGraph:
if c.is_template():
continue
var item : TreeItem = create_item(parent)
item.set_text(0, c.get_type_name())
if c == selected:
item.set_custom_color(0, Color(0.5, 0.5, 1))
elif c.is_editable():
item.set_custom_color(0, Color(1, 1, 1))
item.set_metadata(0, c)
# if c.get_output_defs().size() > 0:
# call_deferred("set_icon", item, c)
fill_item(item, c, selected)
func _on_Hierarchy_item_double_clicked():
emit_signal("group_selected", get_selected().get_metadata(0))

View File

@ -0,0 +1,15 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://material_maker/widgets/graph_tree/hierarchy_pane.gd" type="Script" id=1]
[node name="Hierarchy" type="Tree"]
anchor_right = 1.0
anchor_bottom = 1.0
rect_min_size = Vector2( 200, 150 )
allow_reselect = true
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[connection signal="item_activated" from="." to="." method="_on_Hierarchy_item_double_clicked"]
[connection signal="item_double_clicked" from="." to="." method="_on_Hierarchy_item_double_clicked"]