Bubble-Blower/addons/ai_assistant_hub/chat_history_editor.gd
Marvin Dalheimer 0ab65e1df6
Init
2025-01-25 21:40:19 +01:00

45 lines
1.4 KiB
GDScript

@tool
class_name ChatHistoryEditor
extends Window
const CHAT_HISTORY_ENTRY = preload("res://addons/ai_assistant_hub/chat_history_entry.tscn")
@onready var entries_container: VBoxContainer = %EntriesContainer
@onready var background: Panel = %Background
var _converstaion:AIConversation
var _chat_history:Array
var _entries_map:Dictionary # ChatHistoryEntry, Dictionary - maps the UI entries to the array entries
func initialize(converstaion:AIConversation) -> void:
_converstaion = converstaion
_chat_history = _converstaion.clone_chat()
await ready
var back_color:= EditorInterface.get_base_control().get_theme_color("base_color", "Editor")
background.get_theme_stylebox("panel").bg_color = back_color
for section in _chat_history:
var entry:ChatHistoryEntry = CHAT_HISTORY_ENTRY.instantiate()
entry.initialize(section)
entries_container.add_child(entry)
_entries_map[entry] = section
entry.modified.connect(_on_entry_modified)
func _on_entry_modified(entry:ChatHistoryEntry) -> void:
var section:Dictionary = _entries_map[entry]
section["role"] = entry.get_role()
section["content"] = entry.get_content()
func _on_save_and_close_btn_pressed() -> void:
for entry in _entries_map.keys():
if entry.should_be_forgotten():
_chat_history.erase(_entries_map[entry])
_converstaion.overwrite_chat(_chat_history)
queue_free()
func _on_close_requested() -> void:
queue_free()