First work on dialogic, resized guild, and started implementing portraits.
This commit is contained in:
336
addons/dialogic/Editor/editor_main.gd
Normal file
336
addons/dialogic/Editor/editor_main.gd
Normal file
@@ -0,0 +1,336 @@
|
||||
@tool
|
||||
extends Control
|
||||
|
||||
## Editor root node. Most editor functionality is handled by EditorsManager node!
|
||||
|
||||
var plugin_reference: EditorPlugin = null
|
||||
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)
|
||||
|
||||
## REFERENCES
|
||||
editors_manager = $EditorsManager
|
||||
var button: Button = editors_manager.add_icon_button(
|
||||
get_theme_icon("MakeFloating", "EditorIcons"), "Make floating"
|
||||
)
|
||||
button.pressed.connect(toggle_floating_window)
|
||||
|
||||
# File dialog
|
||||
editor_file_dialog = EditorFileDialog.new()
|
||||
add_child(editor_file_dialog)
|
||||
|
||||
var info_message := Label.new()
|
||||
info_message.add_theme_color_override("font_color", get_theme_color("warning_color", "Editor"))
|
||||
editor_file_dialog.get_line_edit().get_parent().add_sibling(info_message)
|
||||
info_message.get_parent().move_child(info_message, info_message.get_index() - 1)
|
||||
editor_file_dialog.set_meta("info_message_label", info_message)
|
||||
|
||||
$SaveConfirmationDialog.add_button("No Saving Please!", true, "nosave")
|
||||
$SaveConfirmationDialog.hide()
|
||||
update_theme_additions()
|
||||
EditorInterface.get_base_control().theme_changed.connect(update_theme_additions)
|
||||
|
||||
|
||||
func _on_sidebar_toggled(sidebar_shown: bool) -> void:
|
||||
var h_split := (%HSplit as HSplitContainer)
|
||||
if sidebar_shown:
|
||||
h_split.dragger_visibility = SplitContainer.DRAGGER_VISIBLE
|
||||
h_split.split_offset = 150
|
||||
h_split.collapsed = false
|
||||
else:
|
||||
h_split.dragger_visibility = SplitContainer.DRAGGER_HIDDEN_COLLAPSED
|
||||
h_split.split_offset = 0
|
||||
h_split.collapsed = true
|
||||
|
||||
|
||||
func update_theme_additions() -> void:
|
||||
add_theme_stylebox_override(
|
||||
"panel",
|
||||
(
|
||||
DCSS
|
||||
. inline(
|
||||
{
|
||||
"background": get_theme_color("base_color", "Editor"),
|
||||
"padding":
|
||||
[5 * DialogicUtil.get_editor_scale(), 5 * DialogicUtil.get_editor_scale()],
|
||||
}
|
||||
)
|
||||
)
|
||||
)
|
||||
var holder_panel := (
|
||||
DCSS
|
||||
. inline(
|
||||
{
|
||||
"border-radius": 5,
|
||||
#'border': 2,
|
||||
#'border-color': get_theme_color("base_color", "Editor"),
|
||||
"background": get_theme_color("dark_color_2", "Editor"),
|
||||
"padding":
|
||||
[5 * DialogicUtil.get_editor_scale(), 5 * DialogicUtil.get_editor_scale()],
|
||||
}
|
||||
)
|
||||
)
|
||||
holder_panel.border_width_top = 0
|
||||
holder_panel.corner_radius_top_left = 0
|
||||
editors_manager.editors_holder.add_theme_stylebox_override("panel", holder_panel)
|
||||
|
||||
if theme == null:
|
||||
theme = Theme.new()
|
||||
theme.clear()
|
||||
|
||||
theme.set_type_variation("DialogicTitle", "Label")
|
||||
theme.set_font("font", "DialogicTitle", get_theme_font("title", "EditorFonts"))
|
||||
theme.set_color("font_color", "DialogicTitle", get_theme_color("warning_color", "Editor"))
|
||||
theme.set_color(
|
||||
"font_uneditable_color", "DialogicTitle", get_theme_color("warning_color", "Editor")
|
||||
)
|
||||
theme.set_color(
|
||||
"font_selected_color", "DialogicTitle", get_theme_color("warning_color", "Editor")
|
||||
)
|
||||
theme.set_font_size(
|
||||
"font_size", "DialogicTitle", get_theme_font_size("doc_size", "EditorFonts")
|
||||
)
|
||||
|
||||
theme.set_type_variation("DialogicSubTitle", "Label")
|
||||
theme.set_font("font", "DialogicSubTitle", get_theme_font("title", "EditorFonts"))
|
||||
theme.set_font_size(
|
||||
"font_size", "DialogicSubTitle", get_theme_font_size("doc_size", "EditorFonts")
|
||||
)
|
||||
theme.set_color("font_color", "DialogicSubTitle", get_theme_color("accent_color", "Editor"))
|
||||
|
||||
theme.set_type_variation("DialogicPanelA", "PanelContainer")
|
||||
var panel_style := (
|
||||
DCSS
|
||||
. inline(
|
||||
{
|
||||
"border-radius": 10,
|
||||
"background": get_theme_color("base_color", "Editor"),
|
||||
"padding": [5, 5],
|
||||
}
|
||||
)
|
||||
)
|
||||
theme.set_stylebox("panel", "DialogicPanelA", panel_style)
|
||||
theme.set_stylebox("normal", "DialogicPanelA", panel_style)
|
||||
|
||||
var dark_panel := panel_style.duplicate()
|
||||
dark_panel.bg_color = get_theme_color("dark_color_3", "Editor")
|
||||
theme.set_stylebox("panel", "DialogicPanelDarkA", dark_panel)
|
||||
|
||||
var cornerless_panel := panel_style.duplicate()
|
||||
cornerless_panel.corner_radius_top_left = 0
|
||||
theme.set_stylebox("panel", "DialogicPanelA_cornerless", cornerless_panel)
|
||||
|
||||
# panel used for example for portrait previews in character editor
|
||||
theme.set_type_variation("DialogicPanelB", "PanelContainer")
|
||||
var side_panel: StyleBoxFlat = panel_style.duplicate()
|
||||
side_panel.corner_radius_top_left = 0
|
||||
side_panel.corner_radius_bottom_left = 0
|
||||
side_panel.expand_margin_left = get_theme_constant("separation", "SplitContainer")
|
||||
side_panel.bg_color = get_theme_color("dark_color_2", "Editor")
|
||||
side_panel.set_border_width_all(1)
|
||||
side_panel.border_width_left = 0
|
||||
side_panel.border_color = get_theme_color("contrast_color_2", "Editor")
|
||||
theme.set_stylebox("panel", "DialogicPanelB", side_panel)
|
||||
|
||||
theme.set_type_variation("DialogicEventEdit", "Control")
|
||||
var edit_panel := StyleBoxFlat.new()
|
||||
edit_panel.draw_center = true
|
||||
edit_panel.bg_color = get_theme_color("accent_color", "Editor")
|
||||
edit_panel.bg_color.a = 0.05
|
||||
edit_panel.border_width_bottom = 2
|
||||
edit_panel.border_color = get_theme_color("accent_color", "Editor").lerp(
|
||||
get_theme_color("dark_color_2", "Editor"), 0.4
|
||||
)
|
||||
edit_panel.content_margin_left = 5
|
||||
edit_panel.content_margin_right = 5
|
||||
edit_panel.set_corner_radius_all(1)
|
||||
theme.set_stylebox("panel", "DialogicEventEdit", edit_panel)
|
||||
theme.set_stylebox("normal", "DialogicEventEdit", edit_panel)
|
||||
|
||||
var focus_edit := edit_panel.duplicate()
|
||||
focus_edit.border_color = get_theme_color("property_color_z", "Editor")
|
||||
focus_edit.draw_center = false
|
||||
theme.set_stylebox("focus", "DialogicEventEdit", focus_edit)
|
||||
|
||||
var hover_edit := edit_panel.duplicate()
|
||||
hover_edit.border_color = get_theme_color("warning_color", "Editor")
|
||||
|
||||
theme.set_stylebox("hover", "DialogicEventEdit", hover_edit)
|
||||
var disabled_edit := edit_panel.duplicate()
|
||||
disabled_edit.border_color = get_theme_color("property_color", "Editor")
|
||||
theme.set_stylebox("disabled", "DialogicEventEdit", disabled_edit)
|
||||
|
||||
theme.set_type_variation("DialogicHintText", "Label")
|
||||
theme.set_color("font_color", "DialogicHintText", get_theme_color("readonly_color", "Editor"))
|
||||
theme.set_font("font", "DialogicHintText", get_theme_font("doc_italic", "EditorFonts"))
|
||||
|
||||
theme.set_type_variation("DialogicHintText2", "Label")
|
||||
theme.set_color(
|
||||
"font_color", "DialogicHintText2", get_theme_color("property_color_w", "Editor")
|
||||
)
|
||||
theme.set_font("font", "DialogicHintText2", get_theme_font("doc_italic", "EditorFonts"))
|
||||
|
||||
theme.set_type_variation("DialogicSection", "Label")
|
||||
theme.set_font("font", "DialogicSection", get_theme_font("main_msdf", "EditorFonts"))
|
||||
theme.set_color("font_color", "DialogicSection", get_theme_color("property_color_z", "Editor"))
|
||||
theme.set_font_size(
|
||||
"font_size", "DialogicSection", get_theme_font_size("doc_size", "EditorFonts")
|
||||
)
|
||||
|
||||
theme.set_type_variation("DialogicSettingsSection", "DialogicSection")
|
||||
theme.set_font("font", "DialogicSettingsSection", get_theme_font("main_msdf", "EditorFonts"))
|
||||
theme.set_color(
|
||||
"font_color", "DialogicSettingsSection", get_theme_color("property_color_z", "Editor")
|
||||
)
|
||||
theme.set_font_size(
|
||||
"font_size", "DialogicSettingsSection", get_theme_font_size("doc_size", "EditorFonts")
|
||||
)
|
||||
|
||||
theme.set_type_variation("DialogicSectionBig", "DialogicSection")
|
||||
theme.set_color("font_color", "DialogicSectionBig", get_theme_color("accent_color", "Editor"))
|
||||
theme.set_font_size(
|
||||
"font_size", "DialogicSectionBig", get_theme_font_size("doc_title_size", "EditorFonts")
|
||||
)
|
||||
|
||||
theme.set_type_variation("DialogicLink", "LinkButton")
|
||||
theme.set_color("font_hover_color", "DialogicLink", get_theme_color("warning_color", "Editor"))
|
||||
|
||||
theme.set_type_variation("DialogicMegaSeparator", "HSeparator")
|
||||
(
|
||||
theme
|
||||
. set_stylebox(
|
||||
"separator",
|
||||
"DialogicMegaSeparator",
|
||||
(
|
||||
DCSS
|
||||
. inline(
|
||||
{
|
||||
"border-radius": 10,
|
||||
"border": 0,
|
||||
"background": get_theme_color("accent_color", "Editor"),
|
||||
"padding": [5, 5],
|
||||
}
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
theme.set_constant("separation", "DialogicMegaSeparator", 50)
|
||||
|
||||
theme.set_type_variation("DialogicTextEventTextEdit", "CodeEdit")
|
||||
var editor_settings := plugin_reference.get_editor_interface().get_editor_settings()
|
||||
var text_panel := (
|
||||
DCSS
|
||||
. inline(
|
||||
{
|
||||
"border-radius": 8,
|
||||
"background":
|
||||
editor_settings.get_setting("text_editor/theme/highlighting/background_color").lerp(
|
||||
editor_settings.get_setting("text_editor/theme/highlighting/text_color"), 0.05
|
||||
),
|
||||
"padding": [8, 8],
|
||||
}
|
||||
)
|
||||
)
|
||||
text_panel.content_margin_bottom = 5
|
||||
text_panel.content_margin_left = 13
|
||||
theme.set_stylebox("normal", "DialogicTextEventTextEdit", text_panel)
|
||||
|
||||
var event_field_group_panel := DCSS.inline({
|
||||
'border-radius': 8,
|
||||
"border":1,
|
||||
"padding":2,
|
||||
"boder-color": get_theme_color("property_color", "Editor"),
|
||||
"background":"none"})
|
||||
theme.set_type_variation("DialogicEventEditGroup", "PanelContainer")
|
||||
theme.set_stylebox("panel", "DialogicEventEditGroup", event_field_group_panel)
|
||||
|
||||
theme.set_icon('Plugin', 'Dialogic', load("res://addons/dialogic/Editor/Images/plugin-icon.svg"))
|
||||
|
||||
|
||||
## Switches from floating window mode to embedded mode based on current mode
|
||||
func toggle_floating_window() -> void:
|
||||
if get_parent() is Window:
|
||||
swap_to_embedded_editor()
|
||||
else:
|
||||
swap_to_floating_window()
|
||||
|
||||
|
||||
## Removes the main control from it's parent and adds it to a new Window node
|
||||
func swap_to_floating_window() -> void:
|
||||
if get_parent() is Window:
|
||||
return
|
||||
|
||||
var parent := get_parent()
|
||||
get_parent().remove_child(self)
|
||||
var window := Window.new()
|
||||
parent.add_child(window)
|
||||
window.add_child(self)
|
||||
window.title = "Dialogic"
|
||||
window.close_requested.connect(swap_to_embedded_editor)
|
||||
window.content_scale_mode = Window.CONTENT_SCALE_MODE_CANVAS_ITEMS
|
||||
window.content_scale_aspect = Window.CONTENT_SCALE_ASPECT_EXPAND
|
||||
window.size = size
|
||||
window.min_size = Vector2(500, 500)
|
||||
set_anchors_preset(Control.PRESET_FULL_RECT)
|
||||
window.disable_3d = true
|
||||
window.wrap_controls = true
|
||||
window.popup_centered()
|
||||
plugin_reference.get_editor_interface().set_main_screen_editor("2D")
|
||||
|
||||
|
||||
## Removes the main control from the window node and adds it to it's grandparent
|
||||
## which is the original owner.
|
||||
func swap_to_embedded_editor() -> void:
|
||||
if not get_parent() is Window:
|
||||
return
|
||||
|
||||
var window := get_parent()
|
||||
get_parent().remove_child(self)
|
||||
plugin_reference.get_editor_interface().set_main_screen_editor("Dialogic")
|
||||
window.get_parent().add_child(self)
|
||||
window.queue_free()
|
||||
|
||||
|
||||
func godot_file_dialog(
|
||||
callable: Callable,
|
||||
filter: String,
|
||||
mode := EditorFileDialog.FILE_MODE_OPEN_FILE,
|
||||
window_title := "Save",
|
||||
current_file_name := "New_File",
|
||||
saving_something := false,
|
||||
extra_message: String = ""
|
||||
) -> EditorFileDialog:
|
||||
for connection in editor_file_dialog.file_selected.get_connections():
|
||||
editor_file_dialog.file_selected.disconnect(connection.callable)
|
||||
for connection in editor_file_dialog.dir_selected.get_connections():
|
||||
editor_file_dialog.dir_selected.disconnect(connection.callable)
|
||||
editor_file_dialog.file_mode = mode
|
||||
editor_file_dialog.clear_filters()
|
||||
editor_file_dialog.popup_centered_ratio(0.6)
|
||||
editor_file_dialog.add_filter(filter)
|
||||
editor_file_dialog.title = window_title
|
||||
editor_file_dialog.current_file = current_file_name
|
||||
editor_file_dialog.disable_overwrite_warning = !saving_something
|
||||
if extra_message:
|
||||
editor_file_dialog.get_meta("info_message_label").show()
|
||||
editor_file_dialog.get_meta("info_message_label").text = extra_message
|
||||
else:
|
||||
editor_file_dialog.get_meta("info_message_label").hide()
|
||||
|
||||
if mode == EditorFileDialog.FILE_MODE_OPEN_FILE or mode == EditorFileDialog.FILE_MODE_SAVE_FILE:
|
||||
editor_file_dialog.file_selected.connect(callable)
|
||||
elif mode == EditorFileDialog.FILE_MODE_OPEN_DIR:
|
||||
editor_file_dialog.dir_selected.connect(callable)
|
||||
elif mode == EditorFileDialog.FILE_MODE_OPEN_ANY:
|
||||
editor_file_dialog.dir_selected.connect(callable)
|
||||
editor_file_dialog.file_selected.connect(callable)
|
||||
return editor_file_dialog
|
||||
Reference in New Issue
Block a user