mirror of
https://github.com/Relintai/material-maker.git
synced 2025-04-01 05:55:37 +02:00
Added hierarchy pane
This commit is contained in:
parent
6148004b45
commit
8283c744d3
@ -7,6 +7,7 @@ Base class for texture generators, that defines their API
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
signal parameter_changed
|
signal parameter_changed
|
||||||
|
signal output_changed(index)
|
||||||
|
|
||||||
class InputPort:
|
class InputPort:
|
||||||
var generator : MMGenBase = null
|
var generator : MMGenBase = null
|
||||||
@ -49,6 +50,9 @@ func can_be_deleted() -> bool:
|
|||||||
func toggle_editable() -> bool:
|
func toggle_editable() -> bool:
|
||||||
return false
|
return false
|
||||||
|
|
||||||
|
func is_template() -> bool:
|
||||||
|
return model != null
|
||||||
|
|
||||||
func is_editable() -> bool:
|
func is_editable() -> bool:
|
||||||
return false
|
return false
|
||||||
|
|
||||||
@ -117,6 +121,7 @@ func notify_output_change(output_index : int) -> void:
|
|||||||
var targets = get_targets(output_index)
|
var targets = get_targets(output_index)
|
||||||
for target in targets:
|
for target in targets:
|
||||||
target.generator.source_changed(target.input_index)
|
target.generator.source_changed(target.input_index)
|
||||||
|
emit_signal("output_changed", output_index)
|
||||||
|
|
||||||
func source_changed(__) -> void:
|
func source_changed(__) -> void:
|
||||||
emit_signal("parameter_changed", "__input_changed__", 0)
|
emit_signal("parameter_changed", "__input_changed__", 0)
|
||||||
|
@ -16,6 +16,7 @@ onready var layout = $VBoxContainer/Layout
|
|||||||
var library
|
var library
|
||||||
var preview_2d
|
var preview_2d
|
||||||
var preview_3d
|
var preview_3d
|
||||||
|
var hierarchy
|
||||||
|
|
||||||
onready var preview_2d_background = $VBoxContainer/Layout/SplitRight/ProjectsPane/Preview2D
|
onready var preview_2d_background = $VBoxContainer/Layout/SplitRight/ProjectsPane/Preview2D
|
||||||
onready var preview_2d_background_button = $VBoxContainer/Layout/SplitRight/ProjectsPane/PreviewUI/Preview2DButton
|
onready var preview_2d_background_button = $VBoxContainer/Layout/SplitRight/ProjectsPane/PreviewUI/Preview2DButton
|
||||||
@ -130,6 +131,8 @@ func _ready() -> void:
|
|||||||
library = layout.get_pane("Library")
|
library = layout.get_pane("Library")
|
||||||
preview_2d = layout.get_pane("Preview2D")
|
preview_2d = layout.get_pane("Preview2D")
|
||||||
preview_3d = layout.get_pane("Preview3D")
|
preview_3d = layout.get_pane("Preview3D")
|
||||||
|
hierarchy = layout.get_pane("Hierarchy")
|
||||||
|
hierarchy.connect("group_selected", self, "on_group_selected")
|
||||||
|
|
||||||
# Load recent projects
|
# Load recent projects
|
||||||
load_recents()
|
load_recents()
|
||||||
@ -521,6 +524,7 @@ func _on_PopupMenu_id_pressed(id) -> void:
|
|||||||
# Preview
|
# Preview
|
||||||
|
|
||||||
func update_preview() -> void:
|
func update_preview() -> void:
|
||||||
|
hierarchy.update_from_graph_edit(get_current_graph_edit())
|
||||||
var status
|
var status
|
||||||
need_update = true
|
need_update = true
|
||||||
if updating:
|
if updating:
|
||||||
@ -587,6 +591,11 @@ func _on_Projects_tab_changed(tab) -> void:
|
|||||||
current_tab = new_tab
|
current_tab = new_tab
|
||||||
update_preview()
|
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:
|
func _exit_tree() -> void:
|
||||||
# Save the window position and size to remember it when restarting the application
|
# Save the window position and size to remember it when restarting the application
|
||||||
config_cache.set_value("window", "screen", OS.current_screen)
|
config_cache.set_value("window", "screen", OS.current_screen)
|
||||||
|
@ -9,7 +9,8 @@ const PANE_POSITIONS = {
|
|||||||
const PANES = [
|
const PANES = [
|
||||||
{ name="Library", scene=preload("res://material_maker/library.tscn"), position="TopLeft" },
|
{ 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="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 = {}
|
var panes = {}
|
||||||
|
57
material_maker/widgets/graph_tree/hierarchy_pane.gd
Normal file
57
material_maker/widgets/graph_tree/hierarchy_pane.gd
Normal 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))
|
15
material_maker/widgets/graph_tree/hierarchy_pane.tscn
Normal file
15
material_maker/widgets/graph_tree/hierarchy_pane.tscn
Normal 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"]
|
Loading…
Reference in New Issue
Block a user